Your browser lacks required capabilities. Please upgrade it or switch to another to continue.
Loading…
<<nobr>>
<<set _bath = random(1, 3)>>
<div class="scene-panel compact">
<<if $caged>>
<img class="hero-img cage-frame" @src="setup.ImagePath+'bathroom/pee-caged.webp'" alt="">
<<if _bath eq 1>>
<p class="scene-lead">The mirror catches the cage's outline beneath your clothes, and you look away from your reflection.</p>
<<elseif _bath eq 2>>
<p class="scene-lead">Even using the bathroom requires careful angles now. The lock turns a simple task into an awkward process.</p>
<<else>>
<p class="scene-lead">You run water over your hands. The cold metal presses into your skin every time you bend, so you stand straighter and finish quickly.</p>
<</if>>
<<else>>
<img class="hero-img" @src="setup.ImagePath+'bathroom/pee.jpeg'" alt="">
<<if _bath eq 1>>
<p class="scene-lead">It is an ordinary bathroom visit in a body that still feels like your own, at least for now.</p>
<<elseif _bath eq 2>>
<p class="scene-lead">Steam covers the mirror while you wash your face. The same face is under it when you wipe the glass.</p>
<<else>>
<p class="scene-lead">At home, there are no lectures or rankings to follow you into the bathroom. There is only the sound of water in the pipes.</p>
<</if>>
<</if>>
<div class="hub-actions">
<<if $gameDate.getHours() lt 9 && $gameDate.getHours() gt 7>>[[Watch step-sister shower|watch step-sister shower]]<</if>>
[[Pee]]
<<if $caged>>[[Wash carefully (cage)|Bathroom cage wash]]<</if>>
<<if !$caged && $aroused gte 40>>[[Cold water on the neck|Bathroom cold splash]]<</if>>
[[Home]]
</div>
</div>
<</nobr>><<nobr>>
<<set _sh = random(1, 3)>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'sister/shower'+ random(1, 2) +'.webp'" alt="">
<<if _sh eq 1>>
<p class="delayed">Steam slips into the hall while she hums behind the door. You have been standing still for far too long.</p>
<<actor-thought you>>
$sisterName leaves the door less closed than manners require. Or you're inventing that.
<</actor-thought>>
<<elseif _sh eq 2>>
<p class="delayed">Water beats against the tile as you catch sight of her silhouette and freeze.</p>
<<if $caged>>
<<actor-thought you>>
Your cock strains against the cage at the worst possible moment. Of course it does.
<</actor-thought>>
<<else>>
<<actor-thought you>>
This is a terrible idea, but it is still turning you on. You can never tell anyone about it.
<</actor-thought>>
<</if>>
<<else>>
<p class="delayed">She calls through the steam without seeing you... or pretending not to.</p>
<<actor sister>>
If that's you hovering, go be useful somewhere else.
<</actor>>
<<actor-thought you>>
She may not have caught you looking, but she knows you were hovering. You retreat with heat in your face.
<</actor-thought>>
<</if>>
<<run setup.nudgeArousal(8)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
<<set _pee = random(1, 4)>>
<div class="scene-panel compact">
<<if $caged>>
<img class="hero-img cage-frame centered" @src="setup.ImagePath+'bathroom/pee-caged.webp'" alt="">
<<if _pee eq 1>>
<p class="delayed">You sit down, adjust the angle, and wait patiently. What used to take five seconds now leaves you awkward and ashamed.</p>
<<elseif _pee eq 2>>
<p class="delayed">You wait until the house is quiet before letting the metal rest against the porcelain, muttering a soft curse as you adjust yourself.</p>
<<elseif _pee eq 3>>
<p class="delayed">You miss and have to wipe everything twice. $girlfriendName would never let you live this down.</p>
<<else>>
<p class="delayed">When you are done, you wash your hands twice. The cage feels warm against you.</p>
<</if>>
<<actor-thought you>>
Even this is hers now... permissions, angles, the way you stand when you leave.
<</actor-thought>>
<<run setup.nudgeArousal(5)>>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'bathroom/pee.jpeg'" alt="">
<<if _pee eq 1>>
<p class="delayed">It is quick, normal, and almost boring. Later, you will miss how little thought it required.</p>
<<elseif _pee eq 2>>
<p class="delayed">You catch your reflection and look fine. Unlocked is invisible until it isn't.</p>
<<else>>
<p class="delayed">The plumbing does its job, you wash your hands, and then you get on with the day.</p>
<</if>>
<</if>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 0)>>
/* no hour burn for pee, tiny beat */
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
<<set _w = random(1, 3)>>
<div class="scene-panel compact">
/* Your cage only, not genres/cage (those can show other people / wrong fantasy) */
<img class="hero-img cage-frame centered" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<if _w eq 1>>
<p class="delayed">You work warm water and soap around the bars. You clean them the way she checks them.</p>
<<actor-thought you>>
She really might, and the thought makes you swell painfully against the metal.
<</actor-thought>>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<<elseif _w eq 2>>
<p class="delayed">You jiggle the cage under the stream, testing, not unlocking. Nothing gives.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<else>>
<p class="delayed">You finish with a cold rinse that shocks the heat out of you, but the warm ache returns as soon as you dry off.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<</if>>
<<run setup.nudgeArousal(8)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Towel off. Stay locked.|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'you/relaxed.png'" alt="">
<p class="delayed">You splash cold water on your neck and steady your breathing. The heat eases without disappearing completely.</p>
<<set $aroused = Math.max(0, $aroused - 20)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
<img class="centered delayed" @src="setup.ImagePath+'computer/wink-anime.gif'">
<div class="delayed">
An hour disappears into three episodes. For once, nothing interrupts you.
</div>
[[Back|Computer][$gameDate to setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<<set $hotelName = "The Grand Horizon">>
<<set $position = "Front Desk Agent">>
<img class="centered" @src="setup.ImagePath+'work/job-application-form.jpg'">
<<actor-thought you>>
$hotelName is hiring a front desk agent for weekend shifts, with cash paid under the table.
You need the money. The project costs keep growing, and $girlfriendName expects more than your student budget can cover.
<</actor-thought>>
<<actor-thought you>>
You write that you communicate well and notice what guests need. The second part is true. You notice the way $bullyName looks at her and the way she holds his gaze.
Calling yourself detail-oriented sounds better than admitting you cannot stop watching them.
<</actor-thought>>
<div class="continue-links">[[Submit application|Job - ApplyOnline]]</div>
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'work/lobby.webp'">
<p class="delayed">You submit the application. Two days later, an email from the hotel appears in your inbox.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">HR · $hotelName</span></span><span class="content">Dear $youName, thank you for your interest in the $position position. We'd like to invite you for an interview this weekend. Please come prepared to discuss your availability and customer service experience.</span></div></div>
<<actor-thought you>>
You have an interview in a real hotel, and you will need proper clothes. If you get the job, the money could solve several problems.
You assume the cage will stay home, though that may not be your decision.
<</actor-thought>>
<div class="continue-links">
[[Prepare for the interview|Job - TheInterview]]
</div>
<</nobr>><<nobr>>
<<set $interviewerName = 'Mr. Alexander Montgomery'>>
<img class="centered" @src="setup.ImagePath+'work/interview-preparation.webp'">
<p class="delayed">You enter the $hotelName lobby, where soft jazz plays over polished marble floors. The room is quiet enough that every nervous step seems too loud.</p>
<img class="centered delayed" @src="setup.ImagePath+'work/lobby.webp'">
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name"><<print $interviewerName>></span></span><span class="content">Please, have a seat. So... $youName. Tell me about yourself.</span></div></div>
<span id="conv"></span>
<div id="options">
<<you-choice "Be honest: you need the money and you're reliable.">>
<<actor you>>
I need the work. I'm punctual. I don't cause problems. I show up and I do what's needed.
<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name"><<print $interviewerName>></span></span><span class="content">I appreciate the honesty. Most applicants give me a long speech about their passion for hospitality. You sound ready to work.</span></div></div>
<<run setup.nudgeArousal(4)>>
<</you-choice>>
<<you-choice "Dress it up: hospitality is your calling, you love people.">>
<<actor you>>
I've always been drawn to hospitality. Making people feel welcome, it's... it's what I'm good at.
<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name"><<print $interviewerName>></span></span><span class="content">That's the answer I was looking for. You said it well, whether you believe all of it or not. You're hired for weekend shifts, and I'll pay you in cash. Don't be late.</span></div></div>
<</you-choice>>
<<you-choice "Let your nervousness show. Be small. Be harmless.">>
<div class="actor a-you delayed"><img @src="setup.ImagePath+'you/pp.webp'" alt=""><div><span class="name-container"><span class="name">$youName</span></span><span class="content">I... sorry. I'm nervous. I just really need this.</span></div></div> /* prose-ok: nervous speech */
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name"><<print $interviewerName>></span></span><span class="content">Relax. You're doing fine. I'd rather hire someone nervous than someone arrogant. You can start at the desk next weekend, so don't overthink it.</span></div></div>
<<run setup.nudgeArousal(6)>>
<</you-choice>>
</div>
<p class="delayed">He shakes your hand while the jazz continues overhead. By the time you leave the lobby, you have a job.</p>
<div class="continue-links">
[[Send a thank-you note|Job - ThankYouNote]]
</div>
<</nobr>><<nobr>>
<<set $jobMailCounter = 2>>
<<actor-thought you>>
You send a short email thanking him for the opportunity and saying that you look forward to contributing. Ten minutes later, he replies, "See you Saturday."
The job is real, and each shift will end with cash in an envelope. You tell yourself the cage will stay home on weekends because nobody in the lobby needs to know about it.
<</actor-thought>>
<div class="continue-links">
[[Back to Computer|Computer]]
[[Home]]
</div>
<</nobr>><<nobr>>
<p class="letter-head">Subject: Weekend Front Desk Offer
</p><p class="letter">Dear $youName,
The Grand Horizon would like to offer you a weekend position as a Front Desk Agent.
<strong>Offer Details:</strong>
- Position: Front Desk Agent
- Start Date: This weekend, arrive between 7 and 10 o'clock
- Salary/Benefits: $25 per weekend shift
Reply to this email if you have questions. Otherwise, report to the front desk this weekend and ask for the duty manager.
Best regards,
Mr. Alexander Montgomery
General Manager
The Grand Horizon
</p>
[[Leave computer| Home][$work = 'hotel']]
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'computer/computer.png'">
<<if $world eq "normal" && $schoolDay gt 2>>
<div class="quest-banner">
<strong>1 unread: priority</strong>
<p>There is no sender. The subject line contains $girlfriendName's full name.</p>
</div>
<div class="hub-actions">
[[Read the weird mail|Read suspicious Mail]]
</div>
<</if>>
<div class="hub-section">Other</div>
<div class="hub-actions">
/* Job pipeline is ANWO-era desk heat / dating economy. Stay locked in normal prologue. */
<<if $world eq "anwo">>
<<if hasVisited("Job - ThankYouNote") && !hasVisited("Mail from the hotel") && $jobMailCounter lt 1 >>[[Mail from the hotel]]<</if>>
<<if !hasVisited("Research for a job") && $work neq 'hotel'>>[[Research for a job]]<</if>>
<</if>>
[[Watch anime | Anime]]
[[Read about this world|'Read about world ' + $world]]
[[Leave computer| Home]]
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'mail/fake-anwo.png'" alt="The unsolicited ANWO offer">
<p class="letter-head">Subject: You want $girlfriendName. We noticed.</p>
<p class="letter">
$youName,<br><br>
She went home with $exfriendName after the game. You went home alone. Tomorrow she can wake up remembering you as her boyfriend.<br><br>
Her friends and family will remember the same relationship. You will be the only person who remembers that anything changed.<br><br>
The change places you inside ANWO, the Alpha New World Order. Status carries consequences there. Some people receive more freedom than others, and the rules will reach you gradually.<br><br>
Your memories and your body remain yours. We alter the life around them.<br><br>
If you want her, accept before you lose your nerve.<br><br>
You may close this message and decide later. A permanent refusal leaves your life as it is.<br><br>
Someone on your side
</p>
<<actor-thought you>>
I haven't told anyone about the game. Who would even send this?
<</actor-thought>>
<p>You check the sender field one more time. It is blank. Your cursor sits on the close button while you read the offer a second time.</p>
<<actor-thought you>>She'd remember choosing me. I'd still know she hadn't.<</actor-thought>>
<div class="continue-links">
[[Accept. I want her.|Accept ANWO]]
<<link "Not yet.">>
<<set $flags.anwoDeclined = true>>
<<set $flags.anwoDeclineCount = ($flags.anwoDeclineCount || 0) + 1>>
<<goto "Computer">>
<</link>>
[[Reject ANWO permanently.|ANWO final refusal]]
</div>
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'computer/computer.png'" alt="">
<div class="scene-panel compact">
<p class="scene-lead">This warning came from an older version of the story. Nothing installs until you choose it.</p>
<div class="continue-links">
[[Return to the computer|Computer]]
[[Install ANWO|Accept ANWO]]
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'mail/fake-anwo.png'" alt="The ANWO offer waiting on the computer">
<h2 class="scene-title">Refuse the rewrite?</h2>
<p class="scene-lead">This closes the only path into ANWO. $girlfriendName remains with $exfriendName, and nobody's memories change.</p>
<p class="hint-line">This is an alternate ending. Choose "Not yet" instead if you only want more time.</p>
<div class="continue-links">
<<link "Yes. Keep my normal life." "End normal life">>
<<set $flags.anwoDeclined = true>>
<<set $flags.anwoPermanentlyDeclined = true>>
<</link>>
[[No. Decide later.|Computer]]
</div>
</div>
<</nobr>><<nobr>>
<<set _firstAccept = !$flags.anwoAccepted>>
<<if _firstAccept>>
<<set $flags.anwoAccepted = true>>
<<set $strokeState = 'first-time'>>
<<set $relationshipState = "initial-anwo">>
<<set $world = "anwo">>
<<set $schoolDay = 1>>
<<set $flags.phoneUnlocked = true>>
<<set $flags.anwoDeclined = false>>
<</if>>
<<if $flags.anwoVirusForced>>
<<actor-thought you>>
You did not accept anything. The progress bar starts anyway, and the keyboard stops responding.
<</actor-thought>>
<<else>>
<<actor-thought you>>
I want to be the person she waits for. I clicked it. I can't pretend I didn't understand the offer.
<</actor-thought>>
<</if>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'mail/anwo-accept.jpeg'" alt="The ANWO installation starting">
<<actor you>>
Wait... ah!
<</actor>>
<<actor-thought you>>
Pain clamps around your chest. You grab the desk, but your hand slips as the room tilts.
<</actor-thought>>
<<timed 4s>>
<div class="anwo-complete">
<<flash>><</flash>>
<img class="centered" @src="setup.ImagePath+'meta/logo-transparent.png'">
<p class="letter-head">Subject: Complete</p>
<p class="letter">
$youName,<br><br>
$girlfriendName remembers choosing you. Everyone around her remembers the same relationship.<br><br>
$exfriendName is her ex now. In their memories, that relationship ended before yours began. There is no breakup waiting to happen.<br><br>
You retain your original memories. Nobody else remembers the change.<br><br>
ANWO will not change everything at once. Go to school, pay attention, and learn the rules as they reach you.<br><br>
<<if $flags.anwoVirusForced>>
P.S. We warned you that the installer would help.<br><br>
<</if>>
Sleep. Morning will prove the rest.<br><br>
Someone on your side
</p>
<<actor-thought you>>
I saw them together. I can still remember her reaching for his arm. How am I supposed to talk to either of them tomorrow?
<</actor-thought>>
<div class="continue-links">
[[You fall asleep|Sleep]]
</div>
</div>
<<run setTimeout(function () { setup.renderDelayedElements(document.getElementById("passages")); }, 0)>>
<</timed>>
<</nobr>><<nobr>>
/* Legacy landing for older saves that stored this passage; completion now lives inside Accept ANWO. */
<<flash>><</flash>>
<img class="centered" @src="setup.ImagePath+'meta/logo-transparent.png'">
<p class="letter-head">Subject: Complete</p>
<p class="letter">
$youName,<br><br>
$girlfriendName remembers choosing you. Everyone around her remembers the same relationship.<br><br>
$exfriendName is her ex now. In their memories, that relationship ended before yours began. There is no breakup waiting to happen.<br><br>
You retain your original memories. Nobody else remembers the change.<br><br>
ANWO will not change everything at once. Go to school, pay attention, and learn the rules as they reach you.<br><br>
<<if $flags.anwoVirusForced>>
P.S. We warned you that the installer would help.<br><br>
<</if>>
Sleep. Morning will prove the rest.<br><br>
Someone on your side
</p>
<<actor-thought you>>
I still remember them together. Tomorrow, she'll expect me beside her.
<</actor-thought>>
<div class="continue-links">
[[You fall asleep|Sleep]]
</div>
<</nobr>><<nobr>>
<<if !$flags.googledSissy>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'computer/computer.png'" alt="The browser waiting for a search">
<p class="scene-lead">There is nothing to search yet. The hint has to come from somewhere first.</p>
<div class="continue-links">[[Close the browser|Phone]]</div>
</div>
<<elseif !setup.completeWebTrend()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'computer/web-home.webp'" alt="The browser after checking the daily trends">
<h2 class="scene-title">Trending near you</h2>
<p class="scene-lead">You already checked today's trends. Come back tomorrow for new searches.</p>
<div class="continue-links">[[Close the browser|Phone]]</div>
</div>
<<else>>
<<set _trend = random(1, 8)>>
<div class="scene-panel compact">
<h2 class="scene-title">Trending near you</h2>
<<if _trend eq 1>>
<p class="scene-lead">"how to tell your girlfriend you finished looking at her key" sits at the top of the searches with forty thousand results and no useful ones.</p>
<img class="hero-img cage-frame centered" @src="setup.cageMedia()" alt="">
<<elseif _trend eq 2>>
<p class="scene-lead">"do alpha couples adopt locked boyfriends" is trending in your area. The featured answer is a photo essay. You do not open it, then you open it.</p>
<img class="hero-img porn-frame centered" @src="setup.ImagePath+'cuckold/x-tease-'+ random(1, 4) +'.gif'" alt="">
<<elseif _trend eq 3>>
<p class="scene-lead">"chastity homework ideas for busy keyholders" is a top result. The first entry involves a daily photo, a grading rubric, and a rule about knocking.</p>
<img class="hero-img cage-frame centered" @src="setup.genreGifPrefer('keyholder', 'femdom', 'cage')" alt="">
<<elseif _trend eq 4>>
<p class="scene-lead">"is it normal to edge to your own class ranking" has been asked by four different accounts this week. The answers are all variations of "obviously".</p>
<img class="hero-img porn-frame centered" @src="setup.ImagePath+'cuckold/x-tease-'+ random(1, 4) +'.gif'" alt="">
<<elseif _trend eq 5>>
<p class="scene-lead">"cleanup duties, first time, please advise" is trending in the couples section. The top reply is supportive, detailed, and way too calm.</p>
<img class="hero-img porn-frame centered" @src="setup.ImagePath+'cuckold/x-oral-'+ random(1, 5) +'.gif'" alt="">
<<elseif _trend eq 6>>
<p class="scene-lead">"beta fashion that says managed" rounds out the list. The lookbook includes a wristband, a subtle chain, and exactly one type of swimsuit.</p>
<img class="hero-img cage-frame centered" @src="setup.ImagePath+'you/chastity-panty.webp'" alt="">
<<elseif _trend eq 7 && $flags.nightlifeTourDone>>
<p class="scene-lead">"velvet rooms jobs, anonymous" is trending locally. The thread is careful, paid, and suspiciously well moderated for the internet.</p>
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="">
<<else>>
<p class="scene-lead">"girls describe the moment they knew he was a keeper" trends every week. None of the stories are about a keeper like you, but you read all of them anyway.</p>
<img class="hero-img porn-frame centered" @src="setup.ImagePath+'cuckold/x-cum-'+ random(1, 2) +'.gif'" alt="">
<</if>>
<<run setup.nudgeArousal(8)>>
<p class="delayed">You clear the search bar, then type it back in once to see if the suggestion changes. It does not. It never does.</p>
<div class="continue-links">[[Put the phone down|Phone]]</div>
</div>
<</if>>
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'meta/logo-transparent.png'">
<<if $caged>>
<p class="delayed letter">Welcome to the Alpha New World Order.
ANWO assigns social ranks at school and beyond. Those ranks can affect grades, group assignments, relationships, and private agreements between participants.
<strong>How it works:</strong> every participant receives a rank. Alphas are given leadership roles, while betas are expected to assist them. Women are encouraged to use those ranks when choosing partners. Your current status appears on your phone and the school board.
<strong>What changed for you:</strong> after the relationship rewrite, $girlfriendName became your girlfriend. Since then, the school system has legitimized the private rules you accepted with her, including the cage and the key she now holds.
<strong>At school:</strong> lectures explain the ranking system, group projects assign roles, and surveys measure how readily students accept those roles. Your teacher records the results.
<strong>Your role:</strong> attend class, complete assignments, and decide how much you will cooperate. Refusing a task can affect your grades, relationships, and rank.
<em>"Rankings remain provisional until the final assessment."</em>
</p>
<<elseif $flags.classListLive>>
<p class="delayed letter">Welcome to the Alpha New World Order.
ANWO rankings are now posted at school and on your phone. They affect project roles, public recognition, and how teachers describe authority inside a group.
<strong>What changed for you:</strong> accepting the mail rewrote your relationship and placed you inside the assessment system. It did not settle every private rule in advance. Those choices still happen between you and $girlfriendName.
<strong>At school:</strong> lectures, surveys, and recorded decisions continue changing the provisional list. Check the board or Phone Ranks for the current result.
<em>"Rankings remain provisional until the final assessment."</em>
</p>
<<elseif $schoolDay gt 2>>
<p class="delayed letter">You have watched the group assignment divide students before the first public rankings are posted.
The mail on your computer was not spam. Accepting it changed your relationship and placed you in a world where ANWO assessments have begun at school.
The page offers little guidance before the provisional list goes live. For practical details, keep attending class and read the project instructions sent to your phone.
<em>"Participation continues until the assessment period ends."</em>
</p>
<<else>>
<p class="delayed letter">You are not ready for this page yet.
More information becomes available after you complete the first school assessments. Keep attending class and check your messages for instructions.
</p>
<</if>>
[[Back|Computer]]
<</nobr>><<nobr>>
<p class="letter">Nothing about this world appears unusual. School, work, relationships, and everyday life follow the rules you already know.
</p>
[[Back|Computer]]
<</nobr>><<nobr>>
<<run setup.markChapterBreakSeen()>>
<h2 class="center">End of current content</h2>
<p class="hint-line">v<<= setup.GAME_VERSION>></p>
<<if $flags.noAlphaBoundary && $flags.noAlphaRelationshipDone && $flags.noAlphaFridayDone && !$flags.alessiaSoloTeaseSeen>>
<p>You have reached the end of the No-Alpha relationship branch currently available in this version.</p>
<p>$girlfriendName kept your boundary through the first Friday under your new rules. Your relationship, cage arrangement, choices, and save file will continue to matter in future updates.</p>
<<elseif $flags.alessiaKeyChapterDone>>
<p>You have reached the end of the story currently available in this version.</p>
<p><<if $flags.alessiaKeyTransferOccurred>>The borrowed key is back with $girlfriendName after <<if $flags.alessiaHeldKeyForHour>>the agreed hour<<else>>you ended the loan early<</if>>.<<else>>You declined the transfer, completed the drive, and $girlfriendName kept the key throughout.<</if>> The choices you made during the week remain part of your save.</p>
<<else>>
<p>You have reached the end of the story currently available in this version.</p>
<p>Your choices, relationships, Mindset, public recognition, and save file will continue to matter in future updates.</p>
<</if>>
<p>School, work, shopping, Friday nights, Phone tasks, and other repeatable activities remain playable.</p>
<div class="delayed continue-links eoc-actions">
[[Continue exploring|Home]]
<<link "Save game">><<run UI.saves()>><</link>>
[[View current stats|Current stats]]
<<link "Story so far" "Phone recap">><<run setup.capturePhoneOrigin("End of content chat", "Phone recap")>><</link>>
<<link "Return to title">><<run setup.startNewGame()>><</link>>
</div>
<hr class="footnote-sep">
<div class="footnote-content">
<<link "Patreon">><<run setup.openPatreon()>><</link>> ·
<<link "<<= setup.VESPERINA_CREDIT>>">><<run setup.openVesperina()>><</link>>
</div>
<<if setup.SUPPORTER_CREDITS && setup.SUPPORTER_CREDITS.length>>
<section class="supporter-credits">
<h3>Owned supporters</h3>
<p class="hint-line">Thank you for directly funding new chapters.</p>
<<= setup.supporterCreditsHTML()>>
</section>
<</if>>
<</nobr>><<nobr>>
<<set _rank = setup.getPlayerClassRank()>>
<div class="scene-panel compact">
<h2 class="scene-title">Current stats</h2>
<p class="hint-line">Live state for this save. These values may change in future chapters.</p>
<div class="status-panel">
<div class="status-row"><span class="status-label">Mindset</span><strong><<= setup.mindsetLabel().text>></strong></div>
<div class="status-row"><span class="status-label">GF favor</span><strong>$girlfriendTrustLevel/10</strong></div>
<div class="status-row"><span class="status-label">Public recognition</span><strong><<= setup.publicRoleLabel().text>></strong></div>
<<if setup.classRankingUnlocked()>>
<div class="status-row"><span class="status-label">Live class rank</span><strong><<if _rank>>#<<= _rank.rank>> · <<= _rank.band>><<else>>Not available<</if>></strong></div>
<</if>>
<div class="status-row"><span class="status-label">Money</span><strong>$money</strong></div>
<<set _employed = $work && $work isnot "unemployed">>
<<if _employed>>
<div class="status-row"><span class="status-label">Hotel shifts</span><strong>$workShiftsDone</strong></div>
<div class="status-row"><span class="status-label">Desk heat</span><strong><<= setup.workKinkLabel()>> · <<= setup.workNextStepHint()>></strong></div>
<</if>>
<<set _velvetKnown = $flags.nightlifeTourDone || setup.nightlifeRep() gt 0>>
<<if _velvetKnown>>
<div class="status-row"><span class="status-label">Nightlife reputation</span><strong><<= setup.nightlifeRep()>>/8 · <<= setup.nightlifeProgressLabel()>></strong></div>
<</if>>
<<if $world eq "anwo" && ($caged || $flags.fridayDateStage gt 0 || $flags.noAlphaBoundary)>>
<div class="status-row"><span class="status-label">Friday progression</span><strong><<= setup.fridayProgressLabel()>></strong></div>
<div class="status-row"><span class="status-label">Relationship boundary</span><strong><<= setup.relationshipBoundaryLabel()>></strong></div>
<</if>>
</div>
<div class="status-explainer">
<p class="status-explainer-lead">How these work</p>
<p class="hint-line"><strong>Mindset</strong> moves only when you choose something explicitly. Defining a boundary leans Resistance, adopting the arrangement leans Devotion. Fear, silence, or a scene you did not pick does not move it.</p>
<p class="hint-line"><strong>Public recognition</strong> is what other people saw or what someone wrote down. It can move while you say nothing at all.</p>
<p class="hint-line"><strong>GF favor</strong> is how soft or cold she is with you right now. Skipping a Phone task costs a point at sleep.</p>
<<if _employed || _velvetKnown>>
<p class="hint-line"><<if _employed>><strong>Desk heat</strong><<if _velvetKnown>> and <</if>><</if>><<if _velvetKnown>><strong>nightlife reputation</strong><</if>> come from shifts, route, and repetition. They never change Mindset.</p>
<</if>>
</div>
<div class="continue-links">
[[Continue exploring|Home]]
[[Back to release notice|End of content chat]]
<<link "Story so far" "Phone recap">><<run setup.capturePhoneOrigin("Current stats", "Phone recap")>><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<h2 class="scene-title">This snapshot was retired</h2>
<p class="scene-lead">An older version treated the current state as an ending. The main story is still open, and this save can continue into later chapters.</p>
<div class="continue-links">
[[Continue playing|Home]]
<<if setup.chapterBreakReady()>>[[View end of current content|End of content chat]]<</if>>
</div>
</div>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<<include "Legacy ending retired">>
<</nobr>><<nobr>>
<h2 class="center">Ending: Free / Alone</h2>
<p class="letter">
You left without the cage, or ended the arrangement after $girlfriendName became your keyholder.
You can make your own choices again, but $girlfriendName is no longer there to share them.
</p>
<<if $cageAcceptance eq "refused">>
<p class="letter">You said no and she left. Some nights you are proud that you held your ground. On others, you reach for your phone before remembering she will not answer.</p>
<<elseif $girlfriendTrustLevel lte 0>>
<p class="letter">Her favor hit zero. There was no speech left that could rebuild it.</p>
<</if>>
<<actor-thought you>>
Was it worth it? You still do not have an answer.
<</actor-thought>>
<p class="delayed">Thanks for playing <em>Beginning of CGC</em>.</p>
<<link "Back to title">><<run setup.startNewGame()>><</link>>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day1-jenny-ex-kiss.jpg'" alt="Jenny leaving school with her boyfriend">
<h2 class="center">Alternate Ending: Normal Life</h2>
<p class="letter">You delete the message. The next morning, $girlfriendName is still with $exfriendName. School is ordinary, your memories match everyone else's, and ANWO never gets a place in your life.</p>
<<actor-thought you>>
You kept your normal life. It just was not the life the message offered.
<</actor-thought>>
<p class="delayed">This route ends before the main story begins.</p>
<div class="continue-links">
<<link "Return to title">><<run UI.restart()>><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/night-out-leave.jpg'" alt="Jenny leaves after returning the cage key">
<h2 class="center">Alternate Ending: Cheated and Gone</h2>
<p class="letter">$girlfriendName unlocks the cage without another argument. The metal comes away, then the key lands quietly on the table between you.</p>
<<actor girlfriend>>
You were clear before I left. I heard you, and I did what I wanted anyway.
I am sorry. I know that does not fix it.
<</actor>>
<p class="letter">She packs enough for the night and leaves. You are free before the front door closes. The relief does not make the apartment feel less empty.</p>
<<actor-thought you>>
She cheated after you said no. Loving her does not require you to stay.
<</actor-thought>>
<p class="delayed">This relationship ends here. Thanks for playing <em>Beginning of CGC</em>.</p>
<div class="continue-links">
<<link "Return to title">><<run UI.restart()>><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/late/ultimate-he-arrives.jpg'" alt="the interrupted night ends at the door">
<h2 class="center">Alternate Ending: The Last Invitation</h2>
<p class="letter">$bullyName leaves without another joke. When the door closes, $girlfriendName kneels in front of you and unlocks the cage. She places both the metal and the key on the floor.</p>
<<actor girlfriend>>
You said stop. I should have checked before tonight got this far.
I will not ask you to stay while I am holding the thing that kept you in that chair.
<</actor>>
<p class="letter">You dress without speaking. By morning, the relationship is over. The marks from the cage fade before the memory of the room does.</p>
<<actor-thought you>>
You stopped the scene. Leaving afterward was another choice, and this one was yours.
<</actor-thought>>
<p class="delayed">This relationship ends here. Thanks for playing <em>Beginning of CGC</em>.</p>
<div class="continue-links">
<<link "Return to title">><<run UI.restart()>><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/fountain.jpg'" alt="Fountain">
<h2 class="scene-title">Campus fountain</h2>
<p class="scene-lead">Nothing is happening here right now.</p>
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
/* Legacy: Day 10 fountain confrontation is retired. Direct access sends players home cleanly. */
<<set $flags.fountain10Done = true>>
<div class="scene-panel compact">
<p class="scene-lead">The fountain is empty. Whatever happened here is over.</p>
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
/* Legacy: anniversary fountain wait is retired. Day 20 now routes directly Home. */
<<set $flags.fountain20Done = true>>
<div class="scene-panel compact">
<p class="scene-lead">The fountain is empty. She is not coming here tonight.</p>
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
/* Phone entry: left sidebar only (+ badge). Story still uses quest banner when Phone is the objective. */
<div class="scene-panel compact hub-home">
<div class="scene-hero">
<<if $caged>>
<img @src="setup.ImagePath+'you/locked1.webp'" class="hero-img" alt="">
<<elseif $aroused gte 70>>
<img @src="setup.ImagePath+'you/bored'+ random(1, 3) +'.jpeg'" class="hero-img" alt="">
<<else>>
<img @src="setup.ImagePath+'places/bored.jpeg'" class="hero-img" alt="">
<</if>>
<div class="scene-hero-copy">
<h2 class="scene-title">Home</h2>
<<if $caged && $aroused gte 70>>
<p class="scene-lead">You are bored, locked, and too aroused to sit comfortably.</p>
<<elseif $caged>>
<p class="scene-lead">The house is quiet. You adjust the cage and wonder when she will check on you.</p>
<<elseif $world eq "anwo" && $aroused gte 70>>
<p class="scene-lead">You keep replaying class and remembering her perfume while the ache builds.</p>
<<elseif $world eq "anwo">>
<p class="scene-lead">ANWO has changed school, your relationship, and what waits for you at home.</p>
<<elseif $world eq "normal" && $schoolDay gt 2>>
<p class="scene-lead">Something unread is waiting on the computer. Work, dates, the rest of life: locked until you deal with it.</p>
<<elseif $aroused gte 70>>
<p class="scene-lead">You are too worked up to call this boredom.</p>
<<elseif $flags.anniversaryTonight>>
<p class="scene-lead">The room still smells faintly of her perfume from anniversary night.</p>
<<else>>
<p class="scene-lead">What do you do?</p>
<</if>>
</div>
</div>
<<if typeof $flags.showQuestGuidance is "undefined">><<set $flags.showQuestGuidance = false>><</if>>
<<set _quest = setup.getQuestObjective()>>
/* Quest guidance is a settings-menu preference (mirrored into the save) and it
never gates progress: required warnings and the release notice ignore it, and
every other open beat is repeated as a plain action inside its own hub block
below. Nothing on Home turns the hints back on. */
<<set _guidance = setup.questGuidanceOn()>>
<<set _notice = setup.questNoticeRequired(_quest)>>
<<if _quest && (_guidance || _notice)>>
<div class="quest-banner">
<strong><<print _quest.title || "Next">></strong>
<p><<print _quest.text>></p>
<<if _quest.link>>
<<link `_quest.linkLabel` `_quest.link`>>
<<run setup.capturePhoneOrigin("Home", _quest.link)>>
<</link>>
<<elseif _quest.schoolLink>>
<<link "Go to school" `'go to School ' + $world`>>
<</link>>
<</if>>
</div>
<</if>>
<<set _lead = (_guidance || _notice) ? null : setup.leadHomeAction(_quest)>>
<<set _block = _lead ? _lead.block : "">>
<<set _sisterLead = _lead && _lead.passage eq "step-sister" ? true : false>>
/* One reminder line for what is still open today. Labels only: every entry has its own button
below, and the story banner above stays the single "what to do next" element. */
<<set _due = setup.homeDueTodayText()>>
<<if _guidance && _due>>
<p class="hint-line home-due-line"><<print _due>></p>
<</if>>
/* Story stays open, no forced ending. Optional snapshot only if player seeks it. */
<<if !_quest && $world eq "anwo" && $schoolDay gte 26 && !$caged && $cageAcceptance isnot "refused" && !$flags.mustResolveCage>>
<div class="hub-block story-block"><div class="hub-section">Unresolved</div><div class="hub-actions">[[You still have not faced it|Jerk off]]</div></div>
<</if>>
/* Paid hustles: no separate hub, only a soft phone ping when a gig is actually open */
<<if setup.hustleHubOpen() && setup.hustleGlobalReady()>>
<<set _ambH = setup.hustleOpenAmbientList()>>
<<if _ambH.length gt 0>>
<div class="hub-block story-block">
<div class="hub-section">Hustle</div>
<p class="hint-line">Someone wants a paid favor. Optional, skip if you're busy.</p>
<div class="hub-actions">
<<for _ai = 0; _ai lt _ambH.length; _ai++>>
<<set _ah = _ambH[_ai]>>
<<capture _ah>>
<<link `_ah.title + " ($" + _ah.pay + ")"` _ah.passage>>
<<set $flags.hustleFromSchool = "">>
<</link>>
<</capture>>
<</for>>
</div>
</div>
<</if>>
<</if>>
<div class="hub-grid">
<div class="hub-block hub-block-body"><div class="hub-section">Body</div><div class="hub-actions">[[Jerk off]][[Bathroom]]</div></div>
<div class="hub-block hub-block-stay"><div class="hub-section">Stay in</div><div class="hub-actions">
<<if _block eq "stay">><span class="hub-action-lead"><<link _lead.label _lead.passage>><<run setup.capturePhoneOrigin("Home", _lead.passage)>><</link>></span><</if>>
<<if $gameDate.getHours() lt 24>>[[Computer]]<</if>>
/* Phone lives in left sidebar (badge + deep-link). Not duplicated here. */
/* Sister beats / surveys after ANWO rewrite only. The visit itself is a permanent entry,
so the navigator only stands in for it while the sister beat is the open quest. */
<<if $world eq "anwo" && $gameDate.getHours() lt 18 && !_sisterLead>>[[Step-sister|step-sister]]<</if>>
</div></div>
<div class="hub-block hub-block-out"><div class="hub-section">Go out</div><div class="hub-actions">
<<if _block eq "out">><span class="hub-action-lead"><<link _lead.label _lead.passage>><<run setup.capturePhoneOrigin("Home", _lead.passage)>><</link>></span><</if>>
<<if !$flags.mustResolveCage && $gameDate.getHours() lt 10 && $gameDate.getHours() gt 7 && !($gameDate.getDay() == 6 || $gameDate.getDay() == 0)>>[[Go to school|'go to School ' + $world]]<</if>>
/* Work + Friday dates need ANWO (GF rewrite; hotel later has cage heat) */
<<if !$flags.mustResolveCage && $world eq "anwo" && $work != 'unemployed' && $gameDate.getHours() lt 10 && $gameDate.getHours() gt 7 && ($gameDate.getDay() == 6 || $gameDate.getDay() == 0)>>[[Go to work|'go to Work']]<</if>>
<<if !$flags.mustResolveCage && setup.fridayDateReady()>>
<<set _fridayMeta = setup.fridayDateMeta()>>
<<set _fridayEvening = $gameDate.getHours() gte 17>>
<<set _fridayPassage = _fridayEvening ? setup.fridayDatePassage() : "Friday date wait">>
<<set _fridayLabel = _fridayEvening ? _fridayMeta.title : "Friday night">>
<<set _fridayLabel += _fridayMeta.canPay ? " · $" + _fridayMeta.cost : " · Need $" + _fridayMeta.cost>>
<<if !_fridayEvening>><<set _fridayLabel += " · Evening">><</if>>
<span @class="_fridayMeta.canPay ? 'hub-action-cost' : 'hub-action-cost money-short'">
<<link `_fridayLabel` `_fridayPassage`>><</link>>
</span>
<</if>>
/* Park / mall are post-ANWO hubs */
<<if !$flags.mustResolveCage && $world eq "anwo" && $gameDate.getHours() lt 22>>[[Park]]<</if>>
<<if !$flags.mustResolveCage && $world eq "anwo" && $gameDate.getHours() lt 20>>[[Mall]]<</if>>
<<if !$flags.mustResolveCage && setup.nightlifeTourReady()>>[[Visit the Velvet Rooms|Nightlife Velvet Tour]]<</if>>
<<if !$flags.mustResolveCage && setup.nightlifeFirstShiftReady()>><<link "Wait for your first Velvet shift" "Nightlife First Shift">><<run setup.prepareNightlifeFirstShift()>><</link>><</if>>
<<if !$flags.mustResolveCage && setup.nightlifeVelvetHubReady() && $gameDate.getHours() gte 18>>[[The Velvet Rooms|Nightlife Velvet Hub]]<</if>>
</div></div>
<div class="hub-block hub-block-rest"><div class="hub-section">Rest</div><div class="hub-actions"><<if _block eq "rest">><span class="hub-action-lead"><<link _lead.label _lead.passage>><<run setup.capturePhoneOrigin("Home", _lead.passage)>><</link>></span><</if>><<if $flags.mustResolveCage>><span class="hint-line">You cannot sleep around the promise.</span><<elseif $aroused gt 50>>[[Sleep anyway|Sleep]]<<else>>[[Sleep]]<</if>></div></div>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/alessia-instructions.jpg'" alt="Alessia sending her instructions from a violet-lit boutique">
<h2 class="scene-title">Borrowed for Friday</h2>
<p class="scene-lead">The list arrives before Friday. Three screenshots, one boutique address, and a total circled twice.</p>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>></span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
</div>
<div class="messages">
<<actor bestfriend>>
(text) Friday, 4:30. Violet Room boutique.
Black trousers, clean shoes, and fifty dollars for the club. The violet shirt adds fifteen if you take it. I picked it because your idea of club clothes is "whatever hides the cage." 💅
You drive. You carry my bag. You speak when I ask you something.
<</actor>>
<<actor girlfriend>>
(text) The key stays with me. Everything else on her list is real.
If she pushes past something you actually said no to, tell me. Being nervous is not the same as saying no. 😘
<</actor>>
<<actor bestfriend>>
(text) Look at $girlfriendName adding terms because you need instructions for having a spine.
Save the address, wallet boy. Don't make her apologize for you being late. 💀
<</actor>>
</div>
</div>
<<actor-thought you>>
The boutique total is more than a normal shirt should cost. The pickup time sits underneath it like an appointment they already made for you.
<</actor-thought>>
<div class="continue-links delayed">
<<link "Accept the drive and save the list.">>
<<set $flags.alessiaFridayInstructionsDone = true>>
<<set $storyBeat = "alessia-friday-instructions">>
<<goto "Home">>
<</link>>
</div>
</div>
<</nobr>><<nobr>>
<<if !$flags.alessiaFridayInstructionsDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/alessia-instructions.jpg'" alt="Alessia waiting with her phone">
<p class="scene-lead">You have not read $bestfriendName's instructions yet.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif !$gameDate || $gameDate.getDay() neq 5>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-dresscode.jpg'" alt="Alessia waiting beside the violet club shirt">
<p class="scene-lead">The outfit is waiting at the boutique, but $bestfriendName booked you for Friday.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $money lt 50>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-dresscode.jpg'" alt="Alessia waiting beside the violet club shirt">
<h2 class="scene-title">Short wallet</h2>
<p class="scene-lead">Tonight's club money needs at least <strong>$50</strong>. You have <strong>$money</strong>.</p>
<<actor bestfriend>>You had a week to count to fifty. Go earn it and try again next Friday.<</actor>>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-dresscode.jpg'" alt="Alessia supervising the violet club shirt at the boutique">
<h2 class="scene-title">Her dress code</h2>
<p class="scene-lead">$bestfriendName meets you beside the fitting rooms. She is already dressed for the club. A violet satin shirt hangs from one finger.</p>
<p class="hint-line">Club budget: <strong>$50</strong> · violet shirt: <strong>+$15</strong> · wallet <strong>$money</strong></p>
<<actor bestfriend>>
Black trousers are acceptable. The shirt is not a discussion unless you plan to finally have one.
Try it on. I want to know whether the buttons pull when your little secret gets excited.
<</actor>>
<<actor-thought you>>
The shirt is soft, close-cut, and brighter than anything you own. The fitting-room mirror catches every movement you make toward it.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<if $money gte 65>>
<<identity-choice devotion "Fine, I'll wear what you picked.">>
<<actor bestfriend>>There is a complete sentence in you after all. Put it on, leave the top button open, and carry my jacket.<</actor>>
[[Leave for the club|Borrowed Friday club][$flags.alessiaFridayDresscodeDone = true; $flags.alessiaFridayDresscode = "obey"; _ab = setup.applyIdentity("ch6-dresscode-obey"); _hour = setup.setGameHour(17, 0)]]
<</identity-choice>>
<<else>>
<p class="hint-line">The violet shirt route needs $65. You can keep your own shirt or take the wristband with the $50 club budget.</p>
<</if>>
<<you-choice "I'll drive, pay, and help. I am not wearing that shirt. Give me the wristband instead.">>
<<actor bestfriend>>The wristband works. Keep it visible while you carry my stuff.<</actor>>
[[Leave for the club|Borrowed Friday club][$flags.alessiaFridayDresscodeDone = true; $flags.alessiaFridayDresscode = "compromise"; _hour = setup.setGameHour(17, 0)]]
<</you-choice>>
<<identity-choice resistance "No. I agreed to drive and help, but I choose what I wear.">>
<<actor bestfriend>>You finally found a spine. Keep the black shirt. I can embarrass you without dressing you, and $girlfriendName gets the exact quote.<</actor>>
[[Leave for the club|Borrowed Friday club][$flags.alessiaFridayDresscodeDone = true; $flags.alessiaFridayDresscode = "limit"; _ab = setup.applyIdentity("ch6-dresscode-limit"); _hour = setup.setGameHour(17, 0)]]
<</identity-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaFridayDresscodeDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-club-arrival.jpg'" alt="Alessia outside the nightclub">
<p class="scene-lead">$bestfriendName is not taking you inside before the boutique.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaFridayVipDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-vip-tease.jpg'" alt="Alessia in the private club booth">
<p class="scene-lead">The private-booth test is over. $bestfriendName is waiting at the edge of the dance floor.</p>
<div class="continue-links">[[Follow her|Borrowed Friday dance floor]]</div>
</div>
<<elseif $money lt setup.borrowedFridayCost()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-club-arrival.jpg'" alt="Alessia outside the nightclub">
<p class="scene-lead">You cannot cover the agreed <strong>$<<= setup.borrowedFridayCost()>></strong>. The night waits for another Friday.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-club-arrival.jpg'" alt="Alessia entering the club while her borrowed driver carries her things">
<h2 class="scene-title">At the velvet rope</h2>
<p class="scene-lead">$bestfriendName steps out before you finish parking. By the time you catch up, her jacket is over your arm and her bag is in your hand.</p>
<<if $flags.alessiaFridayDresscode eq "obey">>
<<actor bestfriend>>The violet works. Turn around. Good, $girlfriendName can see the fit and the bag in one photo.<</actor>>
<p class="delayed">She takes one picture before you can square your shoulders. Her caption is shorter than the flash: <em>borrowed and dressed.</em></p>
<<elseif $flags.alessiaFridayDresscode eq "limit">>
<<actor bestfriend>>Black shirt, exactly like you demanded. I listened, see? Now hold the bag higher so $girlfriendName can see you still came.<</actor>>
<p class="delayed">She photographs the bag in your hand instead of your clothes, and the caption only says <em>still showed up</em>.</p>
<<else>>
<<actor bestfriend>>Show the wristband. That is your tiny certificate of negotiation. $girlfriendName is going to find this adorable.<</actor>>
<p class="delayed">She frames the violet band beside the key-shaped charm on her phone case, then sends it to $girlfriendName.</p>
<</if>>
<p class="delayed">She takes you past the main floor to a booth behind a violet curtain. Your errands last ten minutes: water, her charger, the bill. Then she props her phone against the ice bucket. $girlfriendName answers from her bedroom, the key visible at her throat.</p>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-vip-tease.jpg'" alt="Alessia facing the MC in the private booth during Jenny's video call">
<<actor girlfriend>>
I can see both of you. No unlocking, no hands inside his clothes, and he can stop whenever he wants.
$youName, tell her what you want.
<</actor>>
<<actor bestfriend>>
Look at that, your keyholder gave you a whole sentence to hide behind.
I want to sit on your lap and find out whether you stay still when I move. Do I have permission?
<</actor>>
<p class="delayed">She waits. No smirk, no hand on you yet. $girlfriendName stays silent on the screen.</p>
<span id="conv"></span>
<div id="options">
<<you-choice "Yes. Sit down and show her.">>
<p class="delayed">$bestfriendName turns and settles across your lap. The first roll of her hips presses the cage into your thigh. The second makes it click. She moves slowly enough that every failed twitch reaches the phone camera.</p>
<<actor bestfriend>>Locked, hard, and useless. $girlfriendName really does know what fits you.<</actor>>
<<actor girlfriend>>Keep looking at me, baby. She stops when you say stop.<</actor>>
[[Follow her to the dance floor|Borrowed Friday dance floor][$flags.alessiaFridayVipDone = true; $flags.alessiaFridayClubStance = "invite"; _heat = setup.nudgeArousal(18)]]
<</you-choice>>
<<you-choice "Thirty seconds. Clothes stay on, and the call stays private.">>
<p class="delayed">She sets a timer on $girlfriendName's screen, then sits sideways across you. Thirty seconds is long enough for her thigh to find the cage and for your breathing to betray you. She stands when the timer ends.</p>
<<actor bestfriend>>You made it to thirty, barely. You still leaked through your underwear before fifteen seconds.<</actor>>
<<actor girlfriend>>The call stays private, baby.<</actor>>
[[Follow her to the dance floor|Borrowed Friday dance floor][$flags.alessiaFridayVipDone = true; $flags.alessiaFridayClubStance = "timed"; _heat = setup.nudgeArousal(14)]]
<</you-choice>>
<<you-choice "No touching. You can tease me without sitting on me.">>
<p class="delayed">$bestfriendName's smile tightens for half a second. Then she leans back and puts both bare feet across your lap instead. One heel rests beside the cage without touching it. She spends the rest of the call describing exactly what she would have done.</p>
<<actor bestfriend>>Still squirming, and I did not touch you. You paid for the whole call.<</actor>>
<<actor girlfriend>>The feet might be meaner anyway.<</actor>>
[[Follow her to the dance floor|Borrowed Friday dance floor][$flags.alessiaFridayVipDone = true; $flags.alessiaFridayClubStance = "boundary"; _heat = setup.nudgeArousal(8)]]
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaFridayVipDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-dance-floor.jpg'" alt="Alessia waiting beside the nightclub dance floor">
<p class="scene-lead">The private-booth call has not happened yet.</p>
<div class="continue-links">[[Return to the booth|Borrowed Friday club]]</div>
</div>
<<elseif $flags.alessiaFridayDanceDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-dance-floor.jpg'" alt="Alessia dancing with an adult club guest while the MC holds her things">
<p class="scene-lead">The song is over. $bestfriendName is waiting near the private restroom.</p>
<div class="continue-links">[[Follow her|Borrowed Friday bathroom]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-dance-floor.jpg'" alt="Alessia kissing an adult club guest while the MC holds her shoes and bag">
<h2 class="scene-title">Her dance, your view</h2>
<p class="scene-lead">The call ends. $bestfriendName puts her shoes in one of your hands and her bag in the other, then walks onto the crowded floor in her bare feet.</p>
<p class="delayed">She chooses a handsome man near the bar. One song becomes two. When he bends toward her, she catches his shirt and kisses him. Her eyes open halfway through and find you exactly where she left you.</p>
<<actor bestfriend>>Hold the shoes higher. I want to know you stayed for the part $girlfriendName did not get on camera.<</actor>>
<<actor-thought you>>
The cage is still hot from the booth. Her heels knock together in your hand while his palm settles at her waist.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I keep watching when she looks back.">>
<p class="delayed">You meet her eyes and do not pretend the kiss is happening somewhere else. She smiles against his mouth before turning fully toward him.</p>
<<actor bestfriend>>At least the driver can follow one simple instruction.<</actor>>
[[Follow her toward the restroom|Borrowed Friday bathroom][$flags.alessiaFridayDanceDone = true; $flags.alessiaFridayDanceStance = "watch"]]
<</you-choice>>
<<you-choice "I look away after the kiss starts.">>
<p class="delayed">You focus on the lights above the bar. The song keeps moving under your feet, and her shoes remain heavy in your hand.</p>
<<actor bestfriend>>Cute. You looked away and still waited with my bag until I was finished.<</actor>>
[[Follow her toward the restroom|Borrowed Friday bathroom][$flags.alessiaFridayDanceDone = true; $flags.alessiaFridayDanceStance = "look-away"]]
<</you-choice>>
<<you-choice "No pictures of this. It stays private.">>
<p class="delayed">She hears you when the song breaks. Her phone stays face down on the table. The man gets another kiss, but no camera turns toward you.</p>
<<actor bestfriend>>Clear enough. I will tell $girlfriendName about it instead, in detail.<</actor>>
[[Follow her toward the restroom|Borrowed Friday bathroom][$flags.alessiaFridayDanceDone = true; $flags.alessiaFridayDanceStance = "private"]]
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaFridayDanceDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-bathroom.jpg'" alt="Alessia waiting in the violet-lit restroom">
<p class="scene-lead">$bestfriendName has not finished on the dance floor yet.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaBorrowedFridayDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-bathroom.jpg'" alt="Alessia holding the black lace from her club outfit">
<p class="scene-lead">The club night is over. $girlfriendName is waiting for the report.</p>
<div class="continue-links">[[Face the debrief|Borrowed Friday debrief]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-bathroom.jpg'" alt="Alessia offering her black lace panties in the club restroom">
<h2 class="scene-title">What she leaves with you</h2>
<p class="scene-lead">After the dance, $bestfriendName takes back her bag but leaves her shoes in your hand. She leads you into the private restroom and locks the door.</p>
<p class="delayed">Behind the locked door, she reaches under her dress. Black lace slides down one leg. She steps out of it and holds it toward you, still warm and damp from dancing.</p>
<<actor bestfriend>>
$girlfriendName wants the full story. This is part of it.
Pocket, permission, or no. Pick one without making me listen to a committee meeting.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll put them in my pocket. My keyholder can decide what happens at home.">>
<p class="delayed">She folds the lace once and pushes it into your front pocket. Her knuckles brush the hard outline of the cage through the fabric, just long enough to make you jerk.</p>
<<actor bestfriend>>That reaction goes in the report too.<</actor>>
[[Drive back to the apartment|Borrowed Friday drive home][_fr = setup.completeBorrowedFriday(); $flags.alessiaBorrowedFridayDone = _fr.completed; $flags.alessiaFridayPanties = "carry"]]
<</you-choice>>
<<you-choice "Call my keyholder first. I want her answer, not an assumption.">>
<<actor girlfriend>>Put them in your jacket pocket and bring them home. Thanks for asking before deciding for me.<</actor>>
<p class="delayed">$bestfriendName drops the lace into your pocket without touching the cage this time.</p>
<<actor bestfriend>>You actually called her first. God, that is embarrassing.<</actor>>
[[Drive back to the apartment|Borrowed Friday drive home][_fr = setup.completeBorrowedFriday(); $flags.alessiaBorrowedFridayDone = _fr.completed; $flags.alessiaFridayPanties = "ask"]]
<</you-choice>>
<<you-choice "No. Put them in your bag. I am not carrying them.">>
<p class="delayed">She studies your face, then drops the lace into her bag.</p>
<<actor bestfriend>>Fine, but you still held my shoes while I kissed him, so do not look too proud.<</actor>>
[[Drive back to the apartment|Borrowed Friday drive home][_fr = setup.completeBorrowedFriday(); $flags.alessiaBorrowedFridayDone = _fr.completed; $flags.alessiaFridayPanties = "refuse"]]
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaBorrowedFridayDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-drive-'+($flags.alessiaFridayDresscode || 'limit')+'.jpg'" alt="The MC driving Alessia home after the club">
<p class="scene-lead">The club night is not finished yet.</p>
<div class="continue-links">[[Return to the club|Borrowed Friday bathroom]]</div>
</div>
<<elseif $flags.alessiaFridayDriveDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-drive-'+($flags.alessiaFridayDresscode || 'limit')+'.jpg'" alt="The MC driving Alessia home after the club">
<p class="scene-lead">The drive is over. $girlfriendName is waiting upstairs.</p>
<div class="continue-links">[[Face the debrief|Borrowed Friday debrief]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-drive-'+($flags.alessiaFridayDresscode || 'limit')+'.jpg'" alt="The MC driving Alessia home in the club outfit chosen at the boutique">
<h2 class="scene-title">Passenger seat</h2>
<p class="scene-lead">The club disappears in the mirror. $bestfriendName reclines beside you with bare feet on the dashboard, her shoes on the floor and her bag safely behind your seat.</p>
<<if $flags.alessiaFridayDresscode eq "obey">>
<p class="delayed">The violet shirt pulls across your shoulders every time you turn the wheel.</p>
<<elseif $flags.alessiaFridayDresscode eq "compromise">>
<p class="delayed">The violet wristband flashes whenever your hand crosses the dashboard lights.</p>
<<else>>
<p class="delayed">Your own black shirt survived her dress code. Everything else about the night still sits beside you.</p>
<</if>>
<<actor bestfriend>>
<<if $flags.alessiaFridayDanceStance eq "watch">>You watched the whole kiss. Now try watching the road with the same commitment.<<elseif $flags.alessiaFridayDanceStance eq "look-away">>You looked away from the kiss and still waited with my things until I was done. Very brave.<<else>>No dance-floor pictures, exactly like you asked. You still waited there holding everything.<</if>>
<</actor>>
<<if $flags.alessiaFridayPanties eq "carry" || $flags.alessiaFridayPanties eq "ask">>
<p class="delayed">The folded lace rests in your pocket through every turn. You keep both hands visible on the wheel.</p>
<<else>>
<p class="delayed">Her lace stays zipped inside the bag behind you. She does not ask you to carry it a second time.</p>
<</if>>
<p class="delayed">At the next red light, your fingers tighten around the wheel. $bestfriendName watches them for a moment instead of your face.</p>
<<actor bestfriend>>
Loosen your hands. You did that with your pen before the presentation too.
Do not read into it. I just want to get home in one piece.
<</actor>>
<<actor girlfriend>>
(text) <<if $girlfriendTrustLevel gte 8>>You did well tonight, baby. Bring her home and come upstairs to me. 😘<<elseif $girlfriendTrustLevel lte 3>>Drive carefully. I want the receipts and a complete report when you arrive.<<else>>I have the booth report. Bring her home, then we talk. 💜<</if>>
<</actor>>
<div class="continue-links">
[[Take her upstairs.|Borrowed Friday debrief][$flags.alessiaFridayDriveDone = true]]
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaFridayDriveDone && !$flags.alessiaFridayDebriefDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-debrief.jpg'" alt="Jenny and Alessia reviewing the Friday report">
<p class="scene-lead">$girlfriendName is still waiting for $bestfriendName's completed report.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/borrowed-friday-debrief.jpg'" alt="Jenny and Alessia reviewing the Friday receipts together">
<h2 class="scene-title">The report</h2>
<p class="scene-lead">$girlfriendName sits at the kitchen counter with the key against her chest. $bestfriendName stands behind her while your receipts and the permitted photos move across the phone screen.</p>
<p class="hint-line">Friday paid: <strong>$<<= $flags.fridayLastPaid || setup.borrowedFridayCost()>></strong> · wallet <strong>$money</strong></p>
<<actor girlfriend>>
You got her there, covered the night, and brought her home. I stayed on the booth call until it ended.
<<if $flags.alessiaFridayClubStance eq "invite">>You told her yes and kept checking my face while she moved on you. I liked that part.<</if>>
<<if $flags.alessiaFridayClubStance eq "timed">>Thirty seconds, clothes on, private call. She stopped on time.<</if>>
<<if $flags.alessiaFridayClubStance eq "boundary">>You said no touching. She listened, and you still looked ready to burst with her feet on your lap.<</if>>
<<if $flags.alessiaFridayDanceStance eq "watch">>Then you watched her kiss him and you did not look away once, even when she checked on you.<</if>>
<<if $flags.alessiaFridayDanceStance eq "look-away">>You looked away from the kiss. She left the choice alone and kept you holding her things.<</if>>
<<if $flags.alessiaFridayDanceStance eq "private">>You said no pictures on the dance floor. She kept the phone down and gave me an honest report instead.<</if>>
<</actor>>
<<actor bestfriend>>
He was useful, and the cage made all of it funnier.
<<if $flags.alessiaFridayDresscode eq "obey">>The violet shirt did more for him than confidence ever has.<</if>>
<<if $flags.alessiaFridayDresscode eq "compromise">>He negotiated for a wristband like a tiny union representative.<</if>>
<<if $flags.alessiaFridayDresscode eq "limit">>He said no to the shirt without apologizing. I hated the personal growth.<</if>>
<</actor>>
<<if $flags.alessiaFridayPanties eq "carry" || $flags.alessiaFridayPanties eq "ask">>
<p class="delayed">$girlfriendName holds out her hand. You pull the folded black lace from your pocket and place it on her palm. She presses it against the cage through your trousers while $bestfriendName watches.</p>
<<actor girlfriend>>Still warm. You carried that against yourself all the way home and stayed locked. Good boy.<</actor>>
<<elseif $flags.alessiaFridayPanties eq "refuse">>
<p class="delayed">$bestfriendName places the black lace on the counter herself. $girlfriendName glances at it, then back at you.</p>
<<actor girlfriend>>You refused to carry them, and she put them away. That was the agreement. I still saw you holding her shoes while she kissed him.<</actor>>
<</if>>
<<actor-thought you>>
<<if $flags.alessiaFridayClubStance eq "boundary">>You remember her bare feet across your lap and how carefully she kept the promised space above the cage.<<else>>You remember her weight across your lap and $girlfriendName watching from the phone.<</if>> The black lace on the counter stays in view the whole drive home.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I wanted you to see what she could do to me while you kept the key.">>
<<actor girlfriend>>I saw. You wanted my permission even with her body on you. That is why the key stayed here.<</actor>>
<<set $flags.alessiaFridayDebriefStance = "keyholder">>
<<set $girlfriendTrustLevel = setup.changeFavor(1)>>
<<include "Borrowed Friday closing">>
<</you-choice>>
<<you-choice "Watching her kiss him while I held her things made the cage worse.">>
<<actor bestfriend>>Finally. He admits the part I did not even have to set up.<</actor>>
<<actor girlfriend>>Then we know what worked. You watched, came home to me, and stayed locked for all of it.<</actor>>
<<set $flags.alessiaFridayDebriefStance = "watching">>
<<set $girlfriendTrustLevel = setup.changeFavor(1)>>
<<include "Borrowed Friday closing">>
<</you-choice>>
<<you-choice "The choices I made stay mine next time.">>
<<actor girlfriend>>Yes. The shirt, the touching, and what you carry are still separate choices. Nothing becomes automatic, baby.<</actor>>
<<actor bestfriend>>Annoyingly clear. I can work with clear.<</actor>>
<<set $flags.alessiaFridayDebriefStance = "limit">>
<<include "Borrowed Friday closing">>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<div class="borrowed-friday-closing">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch6/alessia-instructions.jpg'" alt="A final message from Alessia about the next Friday">
<<actor bestfriend>>
(text) One request for next time: I want the key for the drive home. One hour. I want to see whether he can sit beside me without checking your neck every ten seconds. 💅
<</actor>>
<<actor girlfriend>>
(text) Request received. No answer tonight.
$youName, put the phone down before you spend all night overthinking it. 😘
<</actor>>
<div class="continue-links">
[[Save the message.|Home][$flags.alessiaFridayDebriefDone = true; $storyBeat = "borrowed-friday-complete"; $gameDate = setup.changeDate($gameDate, "hours", 1)]]
</div>
<<run setTimeout(function () { setup.renderDelayedElements(document.getElementById("conv")); }, 0)>>
</div>
<</nobr>><<nobr>>
<<if !$flags.alessiaFridayDebriefDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-terms.webp'" alt="Jenny considering Alessia's request with the cage key in her hand">
<p class="scene-lead">$girlfriendName has not heard $bestfriendName's full Friday report yet.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyTermsDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-terms.webp'" alt="Jenny holding the key after setting the rules">
<p class="scene-lead">Your answer is recorded. The drive waits for a later Friday.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-terms.webp'" alt="Jenny considering Alessia's request with the cage key in her hand">
<h2 class="scene-title">The answer</h2>
<p class="scene-lead">Saturday morning, $girlfriendName sits on your bed with the key warm in her palm. On her phone, $bestfriendName waits on video, chin in hand, already smiling like she knows how this ends.</p>
<<actor girlfriend>>
She wants one hour on the next drive home. Cage stays locked. No copies, no photos, no passing it around. You can cut the hour short whenever you want.
<<if $flags.alessiaFridayDebriefStance eq "limit">>And everything you shut down last Friday stays shut down unless you say otherwise right now.<</if>>
I'm asking you, baby. Not her.
<</actor>>
<<actor bestfriend>>
(text) relax, i want to hold a key for an hour, not marry him 💅 one drive. then it goes straight back to you. he can keep both hands on the wheel and the whole novel of his panic to himself
<</actor>>
<<actor-thought you>>
She has never let anyone else touch that key. One yes puts it in $bestfriendName's hand for sixty minutes. One no leaves it exactly where it is, warm against $girlfriendName's skin, while you still have to drive her home.
Your cage feels tighter just thinking about either answer.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "One hour. She can hold it, but the cage stays locked.">>
<<actor girlfriend>>Then I put it in her hand myself, I start the timer, and I take it back myself. One more thing. Can she tease you over your trousers on that drive, or is this words only?<</actor>>
<div class="continue-links">
<<link "She can tease me over my trousers.">><<run setup.setAlessiaKeyTerms("accepted", "touch")>><<goto "Home">><</link>>
<<link "Words only. No touching.">><<run setup.setAlessiaKeyTerms("accepted", "verbal")>><<goto "Home">><</link>>
</div>
<</you-choice>>
<<you-choice "She can hold it only inside a sealed pouch.">>
<<actor bestfriend>>(text) a tamper seal for a key i already said i won't use? cute. watching him check it at every light might be worth the stationery 🤭<</actor>>
<<actor girlfriend>>Pouch stays sealed. Same question, baby. Teasing over your trousers, or words only?<</actor>>
<div class="continue-links">
<<link "The sealed pouch and teasing over my trousers.">><<run setup.setAlessiaKeyTerms("sealed", "touch")>><<goto "Home">><</link>>
<<link "The sealed pouch, but words only.">><<run setup.setAlessiaKeyTerms("sealed", "verbal")>><<goto "Home">><</link>>
</div>
<</you-choice>>
<<you-choice "No. You keep the key.">>
<<actor girlfriend>>Okay. It stays with me. You still drive her home next Friday, and nobody gets to rewrite what you just said.<</actor>>
<<actor bestfriend>>(text) shortest sentence of his life. i'll survive the ride without his little brass trophy 💅<</actor>>
<div class="continue-links"><<link "Keep it with her.">><<run setup.setAlessiaKeyTerms("declined", "verbal")>><<goto "Home">><</link>></div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyTermsDone || !setup.alessiaKeyWeekReady(5)>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-park.webp'" alt="Jenny waiting with the key on a park bench">
<p class="scene-lead">The walk waits until after the private answer at home.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyParkDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-park.webp'" alt="Jenny wearing the cage key in the park">
<p class="scene-lead">The private walk is over. $girlfriendName still has the key.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-park.webp'" alt="Jenny wearing the cage key during a quiet Sunday park walk">
<h2 class="scene-title">A day with her</h2>
<p class="scene-lead">Sunday, you walk to the park with $girlfriendName. She takes the longer path beside the pond and puts her phone away before you reach the benches.</p>
<<actor girlfriend>>
I wanted one day that was just us. <<if $flags.alessiaKeyConsent eq "declined">>You said no to the loan. I'm still glad you came.<</if>>
<</actor>>
<p class="delayed">She takes your hand into her coat pocket. A swan follows the bank beside you, stopping whenever you do.</p>
<<if $world eq "anwo">>
<<actor girlfriend>>You called that swan Dennis the first time you brought me here. You said he looked like he owned the pond.<</actor>>
<<actor-thought you>>You remember walking past these benches alone. She was with $exfriendName then. The ANWO message promised to change her memories and leave yours intact. She remembers a whole afternoon with you that you never had.<</actor-thought>>
<<else>>
<<actor girlfriend>>That swan looks like he owns the pond. I'm calling him Dennis.<</actor>>
<</if>>
<<actor you>>He looks like he's about to charge us rent.<</actor>>
<p class="delayed">She laughs and pulls you a little further from the water when the swan hisses.</p>
<<actor girlfriend>>We're leaving, Dennis. You are a terrible host.<</actor>>
<p class="delayed">At the next bench she asks which way you want to go home. You are still holding her hand when you bring up Friday.</p>
<span id="conv"></span>
<div id="options">
<<if $flags.alessiaKeyConsent neq "declined">>
<<you-choice "I agreed because you are still the one setting the limit.">>
<<actor girlfriend>>I am. And you can stop it early. Come on, let's take the path through the trees.<</actor>>
[[Walk home together|Home][$flags.alessiaKeyParkDone = true; $flags.alessiaKeyParkStance = "trust"; $flags.jennyParkMemorySeen = ($world === "anwo"); $gameDate = setup.changeDate($gameDate, "hours", 1)]]
<</you-choice>>
<<you-choice "I agreed only to the exact terms. Nothing extra.">>
<<actor girlfriend>>The exact terms. I'll make her repeat them before we leave on Friday. Today I'd like another ten minutes with you.<</actor>>
[[Walk home together|Home][$flags.alessiaKeyParkDone = true; $flags.alessiaKeyParkStance = "exact"; $flags.jennyParkMemorySeen = ($world === "anwo"); $gameDate = setup.changeDate($gameDate, "hours", 1)]]
<</you-choice>>
<<else>>
<<you-choice "I still wanted this walk after saying no to her.">>
<<actor girlfriend>>So did I. Come closer, your hand's freezing.<</actor>>
[[Walk home together|Home][$flags.alessiaKeyParkDone = true; $flags.alessiaKeyParkStance = "couple"; $flags.jennyParkMemorySeen = ($world === "anwo"); $gameDate = setup.changeDate($gameDate, "hours", 1)]]
<</you-choice>>
<<you-choice "I need her to hear the same answer tomorrow.">>
<<actor girlfriend>>She will. I'll be beside you when she hears it. Let's take the longer way back.<</actor>>
[[Walk home together|Home][$flags.alessiaKeyParkDone = true; $flags.alessiaKeyParkStance = "repeat-boundary"; $flags.jennyParkMemorySeen = ($world === "anwo"); $gameDate = setup.changeDate($gameDate, "hours", 1)]]
<</you-choice>>
<</if>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyParkDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-school.webp'" alt="Jenny and Alessia in the school hallway">
<p class="scene-lead">The hallway conversation waits until after the park walk.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeySchoolDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-school.webp'" alt="Jenny wearing the key beside Alessia at school">
<p class="scene-lead">$bestfriendName already heard the answer. $girlfriendName left the hallway with the key.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-school.webp'" alt="Jenny wearing the cage key while Alessia confronts the MC at school">
<h2 class="scene-title">The answer reaches school</h2>
<p class="scene-lead">Monday morning, $bestfriendName is already leaning on your locker like she owns the row. $girlfriendName stands at your shoulder with the key plain above her blouse. A couple of people slow down just enough to clock the metal.</p>
<<actor bestfriend>>
<<if $flags.alessiaKeyConsent eq "accepted">>You actually said yes. One full hour. I have it written down already.<</if>>
<<if $flags.alessiaKeyConsent eq "sealed">>A sealed pouch for one hour. You turned Friday into registered mail. Adorable.<</if>>
<<if $flags.alessiaKeyConsent eq "declined">>No handoff. Clear answer. You're still driving me, so wipe that proud look off before someone thinks you won something.<</if>>
<</actor>>
<<actor girlfriend>>
You heard him. Do not turn the hallway version into something he never agreed to.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "Repeat only the answer I gave.">>
<<actor bestfriend>><<if $flags.alessiaKeyConsent eq "declined">>No handoff. One drive. That's the whole answer, stray.<</if>><<if $flags.alessiaKeyConsent neq "declined">>One hour, on the rules you approved. Don't make me relist them, stray.<</if>><</actor>>
[[Go to class|After school][$flags.alessiaKeySchoolDone = true; $flags.alessiaKeySchoolStance = "permitted-only"; $schoolDay += 1; _hour = setup.setGameHour(14, 0)]]
<</you-choice>>
<<you-choice "Keep the arrangement between the three of us.">>
<<actor girlfriend>>Then the hallway gets nothing.<</actor>>
<<actor bestfriend>>Fine. Private little triangle. I'll just enjoy knowing and watching you sweat when someone asks why she's wearing that.<</actor>>
[[Go to class|After school][$flags.alessiaKeySchoolDone = true; $flags.alessiaKeySchoolStance = "private"; $schoolDay += 1; _hour = setup.setGameHour(14, 0)]]
<</you-choice>>
<<you-choice "You can say we have a Friday plan. No details.">>
<<actor bestfriend>>Friday drive. An agreement. Vague enough to be boring, accurate enough that your face still does the rest.<</actor>>
[[Go to class|After school][$flags.alessiaKeySchoolDone = true; $flags.alessiaKeySchoolStance = "record"; $schoolDay += 1; _hour = setup.setGameHour(14, 0)]]
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeySchoolDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-cafe.webp'" alt="Jenny and Alessia waiting at a café table">
<p class="scene-lead">The café meeting waits until $bestfriendName has heard the answer at school.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyCafeDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-cafe.webp'" alt="Jenny and Alessia at the café near school">
<p class="scene-lead">The route and check-in rule are already settled.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-cafe.webp'" alt="Jenny, Alessia, and the MC discussing Friday at the café near school">
<h2 class="scene-title">Five minutes from campus</h2>
<p class="scene-lead">After the final bell, the three of you cut past the bus stop into a narrow café five minutes from school. $girlfriendName takes the seat beside you. While the coffees arrive, you draw a crooked bird on a napkin.</p>
<<actor girlfriend>><<if $flags.jennyParkMemorySeen>>Dennis needs better feet. He can't threaten the whole park on those.<<else>>Your bird looks furious. Give him some eyebrows.<</if>><</actor>>
<p class="delayed">You add two heavy lines above its beak. She laughs into her cup and has to put it down.</p>
<<actor bestfriend>>You're keeping that, $girlfriendName? His handwriting finally has competition.<</actor>>
<<actor girlfriend>>I like it. Pass me your pen.<</actor>>
<p class="delayed">She adds enormous feet, folds the napkin, and slips it into her notebook. When $bestfriendName opens the route on her phone, $girlfriendName leaves her chair beside yours.</p>
<<actor bestfriend>>Pickup at the apartment. Riverside, then the long loop home. No club. No mystery stop. No extra passenger for you to hide behind.<</actor>>
<<actor girlfriend>>
<<if $flags.alessiaKeyConsent eq "declined">>And no key transfer. It stays on me the whole route.<</if>>
<<if $flags.alessiaKeyConsent eq "sealed">>Sealed pouch comes back to my hand before anyone goes upstairs.<</if>>
<<if $flags.alessiaKeyConsent eq "accepted">>Key comes back to my hand before anyone goes upstairs.<</if>>
How do we stay in touch during the drive, baby?
<</actor>>
<<actor-thought you>>
<<if $world eq "anwo" && $flags.jennyParkMemorySeen>>You watched her add those ridiculous feet. You can remember every second of her laughing into her coffee. You wish you could ask about the afternoon at the pond without losing this easy conversation.<<else>>She kept your silly drawing. You find yourself looking at the corner of her notebook while $bestfriendName explains the route.<</if>>
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Send a midpoint check-in.">>
<<actor girlfriend>>Halfway, I get the timer and where you are. If you cut the hour short, the message says so. No soft edits.<</actor>>
[[Walk home from the café|Home][$flags.alessiaKeyCafeDone = true; $flags.alessiaKeyContactRule = "midpoint"; $flags.jennyCafeMomentSeen = true; $schoolDay += 1; _hour = setup.setGameHour(17, 0)]]
<</you-choice>>
<<you-choice "Only contact her at the return point.">>
<<actor bestfriend>>One quiet drive, then a return ping. Six blocks is my bet before he asks for the time.<</actor>>
[[Walk home from the café|Home][$flags.alessiaKeyCafeDone = true; $flags.alessiaKeyContactRule = "return-only"; $flags.jennyCafeMomentSeen = true; $schoolDay += 1; _hour = setup.setGameHour(17, 0)]]
<</you-choice>>
<<you-choice "No fake messages about using the key.">>
<<actor bestfriend>>No photos I have to squint at. If you send his face, it is his actual face.<</actor>>
<<actor girlfriend>>Good. Real updates only.<</actor>>
[[Walk home from the café|Home][$flags.alessiaKeyCafeDone = true; $flags.alessiaKeyContactRule = "no-bait"; $flags.jennyCafeMomentSeen = true; $schoolDay += 1; _hour = setup.setGameHour(17, 0)]]
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyCafeDone || !setup.alessiaKeyWeekReady(1)>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-prep.webp'" alt="Jenny preparing the key at home">
<p class="scene-lead">The private preparation waits until after the café meeting.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyPrepDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-prep.webp'" alt="Jenny keeping the prepared key overnight">
<p class="scene-lead">Everything is ready for Friday. The key remains with $girlfriendName overnight.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-prep.webp'" alt="Jenny preparing the cage key and Friday clothes at home">
<h2 class="scene-title">Still hers before the drive</h2>
<p class="scene-lead">Thursday night, $girlfriendName lays your clothes across the bed like she is packing someone else's life. The key stays in her fingers while she tips your chin down and checks the cage, the lock, the way the steel sits against you.</p>
<<if $flags.alessiaKeyConsent eq "sealed">>
<p class="delayed">She drops the key into a clear numbered pouch, presses the seal closed with her thumbnail, then locks the pouch in her bedside drawer. Your cock twitches uselessly when the drawer clicks shut.</p>
<<actor girlfriend>>Sealed. Still mine until tomorrow night. She does not touch that pouch before I put it in her hand myself.<</actor>>
<<elseif $flags.alessiaKeyConsent eq "accepted">>
<p class="delayed">She threads a short violet wrist loop through the key ring, tests the clasp against her pulse, then hangs it back at her throat. The metal kisses the hollow of her neck where you can still see it.</p>
<<actor girlfriend>>The loop makes the return obvious. Stays on my neck until tomorrow night. Don't look so hungry already.<</actor>>
<<else>>
<p class="delayed">She rubs the key with her thumb until it shines, then clips it back around her own neck. The chain settles warm against her skin like nothing is about to change.</p>
<<actor girlfriend>>No pouch. No handoff. Tomorrow it stays exactly here. You can stare all you want.<</actor>>
<</if>>
<p class="delayed">You set a plain black shirt beside the rest. No last-Friday signal. No costume for the drive. Just something to sweat through.</p>
<<actor girlfriend>>Good. The agreement does not need a dress code. Get some sleep if you can.<</actor>>
<div class="continue-links">
[[Finish preparing|Home][$flags.alessiaKeyPrepDone = true; $flags.alessiaKeyPickupStyle = "plain"; _hour = setup.advanceGameHourTo(20, 0)]]
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyPrepDone || !setup.alessiaKeyFridayDue()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-pickup.webp'" alt="Jenny and Alessia waiting beside the car">
<p class="scene-lead">The Friday pickup is not ready. The key remains with $girlfriendName.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyPickupDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-pickup.webp'" alt="Jenny retaining the key before the evening handoff">
<p class="scene-lead">The pickup is complete. $girlfriendName keeps the key until the agreed time.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-week-pickup.webp'" alt="Jenny, Alessia, and the MC meeting beside the car before the handoff">
<h2 class="scene-title">Before dark</h2>
<p class="scene-lead">Friday afternoon light slides off the car roof. $bestfriendName waits by the passenger door with her bag already at her feet. $girlfriendName stands at your side with <<if $flags.alessiaKeyConsent eq "sealed">>the sealed pouch closed in her fist<<else>>the key still warm at her neck<</if>>. Nobody has moved it yet.</p>
<<actor bestfriend>>
<<if $flags.alessiaKeyContactRule eq "midpoint">>Midpoint text is locked in. Try not to hyperventilate before seven.<</if>><<if $flags.alessiaKeyContactRule eq "return-only">>Phone stays quiet until the return. Whole hour of me and the road. Tragic for you.<</if>><<if $flags.alessiaKeyContactRule eq "no-bait">>Only real updates. A crime against comedy, honestly.<</if>>
<</actor>>
<<actor girlfriend>>Nothing leaves my hand before seven. Say what you need now, baby. Not later in the driveway with your voice shaking.<</actor>>
<span id="conv"></span>
<div id="options">
<<if $flags.alessiaKeyConsent neq "declined">>
<<you-choice "The terms have not changed.">>
<<actor girlfriend>>Good. After dark I hand it over myself. Go home and try to breathe until then.<</actor>>
[[Wait at home until evening|Home][$flags.alessiaKeyPickupDone = true; $flags.alessiaKeyPickupStance = "clear"; _hour = setup.advanceGameHourTo(18, 0)]]
<</you-choice>>
<<you-choice "I can still end the loan before the handoff.">>
<<actor girlfriend>>Yes. Saying yes was not a trap. You stop it, the key never leaves me.<</actor>>
<<actor bestfriend>>Fine. You kill it, I drop it. Don't make a speech about it either way.<</actor>>
[[Wait at home until evening|Home][$flags.alessiaKeyPickupDone = true; $flags.alessiaKeyPickupStance = "limit"; _hour = setup.advanceGameHourTo(18, 0)]]
<</you-choice>>
<<else>>
<<you-choice "I said no to the key. I am still giving you the ride.">>
<<actor bestfriend>>Driver. No key. I heard you the first time, stray. Try not to look so brave about a no.<</actor>>
[[Wait at home until evening|Home][$flags.alessiaKeyPickupDone = true; $flags.alessiaKeyPickupStance = "clear"; _hour = setup.advanceGameHourTo(18, 0)]]
<</you-choice>>
<<you-choice "Do not joke later that you held it.">>
<<actor bestfriend>>I'll mock the drive I actually get. Your little brass trophy stays on her neck. Happy?<</actor>>
[[Wait at home until evening|Home][$flags.alessiaKeyPickupDone = true; $flags.alessiaKeyPickupStance = "boundary"; _hour = setup.advanceGameHourTo(18, 0)]]
<</you-choice>>
<</if>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyTermsDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-handoff-kept.webp'" alt="Jenny keeping the cage key in her hand">
<p class="scene-lead">No answer has been recorded, so the key stays with $girlfriendName.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif !$flags.alessiaKeyPickupDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-handoff-kept.webp'" alt="Jenny keeping the cage key before the scheduled pickup">
<p class="scene-lead">The Friday pickup and final check have not happened. The key stays with $girlfriendName.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif !setup.alessiaKeyFridayDue() || $gameDate.getHours() lt 19>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-handoff-kept.webp'" alt="Jenny waiting with the cage key">
<p class="scene-lead">The pickup is scheduled for a later Friday after dark.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyHandoffDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath + 'story/owned/ch7/key-hour-handoff-' + ($flags.alessiaKeyConsent === 'declined' ? 'kept' : 'transfer') + '.webp'" alt="The agreed key handoff before the drive">
<p class="scene-lead">The terms are set and the car is waiting.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<<run setup.handoffAlessiaKey()>>
<div class="scene-panel compact">
<<if $flags.alessiaKeyConsent eq "declined">>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-handoff-kept.webp'" alt="Jenny keeping the cage key while Alessia waits by the car">
<h2 class="scene-title">The key stays</h2>
<p class="scene-lead">Friday night. Streetlight on the car roof. $girlfriendName meets you at the driver's door with the key still on her chain, warm against her blouse. $bestfriendName waits at the passenger side, already watching your eyes climb to that little brass weight.</p>
<<actor girlfriend>>You said no. So there is no handoff. Drive safe and bring her home. I'll be waiting with this exactly where it is.<</actor>>
<<actor bestfriend>>I can still count how many times you check her neck before we pull out. Don't make it a dozen, loser.<</actor>>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-handoff-transfer.webp'" alt="Jenny deliberately passing the cage key to Alessia">
<h2 class="scene-title">The handoff</h2>
<p class="scene-lead">Friday night. $girlfriendName meets you beside the car. $bestfriendName holds her palm open, patient, like she has all night. $girlfriendName <<if $flags.alessiaKeyConsent eq "sealed">>turns the clear pouch under the light and checks the seal<<else>>unclips the key from her chain with two careful fingers<</if>>. For a second the metal hangs between them. Your locked cock aches at nothing.</p>
<<actor girlfriend>>Cage stays locked. Hour starts when this hits your hand. He ends it early, you give it back. No games with my key.<</actor>>
<<actor bestfriend>><<if $flags.alessiaKeyConsent eq "sealed">>Seal intact. Eight o'clock. I can read a clock, and I can watch him sweat.<</if>><<if $flags.alessiaKeyConsent eq "accepted">>Eight o'clock. Then it goes straight back into your hand. I'll try not to enjoy the middle too much.<</if>><</actor>>
<p class="delayed">$girlfriendName sets <<if $flags.alessiaKeyConsent eq "sealed">>the pouch<<else>>the small brass key<</if>> in $bestfriendName's palm and closes her fingers over it for one beat before letting go. Only then does she step back from the passenger door. The empty place at her throat looks wrong.</p>
<</if>>
<<actor-thought you>>
<<if $flags.alessiaKeyConsent eq "declined">>Nothing changed hands. The answer still sits on her chain where you can see it, and somehow that does not make the passenger seat any quieter in your head.<</if>>
<<if $flags.alessiaKeyConsent neq "declined">>The cage is still shut. The person holding the only way out is about to sit beside you for a full hour, and your body already knows it.<</if>>
<</actor-thought>>
<div class="continue-links">
[[Start the drive.|Home][$storyBeat = "alessia-key-handoff"]]
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyHandoffDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-drive-kept.webp'" alt="Alessia waiting in the passenger seat">
<p class="scene-lead">The drive has not started.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyDriveDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath + 'story/owned/ch7/key-hour-drive-' + ($flags.alessiaKeyConsent === 'declined' ? 'kept' : 'transfer') + '.webp'" alt="The night drive with Alessia">
<p class="scene-lead">The car is already approaching the agreed return point.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath + 'story/owned/ch7/key-hour-drive-' + ($flags.alessiaKeyConsent === 'declined' ? 'kept' : 'transfer') + '.webp'" alt="Alessia in the passenger seat during the night drive">
<h2 class="scene-title">Passenger seat</h2>
<p class="scene-lead">The city thins into long red lights and wet asphalt. $bestfriendName sits in the passenger seat with one heel tucked under her, like this is any Friday ride. <<if $flags.alessiaKeyConsent eq "declined">>$girlfriendName's key never crossed the threshold of the car. That does not stop your eyes from hunting for it on a neck that is not here.<</if>><<if $flags.alessiaKeyConsent eq "accepted">>The key rests against her wrist on the violet loop, brass flashing every time she turns her hand. Your locked cock answers the glint with a dull, trapped push that goes nowhere.<</if>><<if $flags.alessiaKeyConsent eq "sealed">>The clear pouch lies sealed on her open palm like a dare she is too lazy to hide. The brass sits a fingertip away through the packet.<</if>></p>
<<actor bestfriend>>
<<if $flags.alessiaKeySchoolStance eq "private">>Nobody at school got the details. Just us three and whatever your face is doing right now.<</if>><<if $flags.alessiaKeySchoolStance eq "permitted-only">>At school I said only <<if $flags.alessiaKeyConsent eq "declined">>your no and the drive<<else>>the hour and the rules you approved<</if>>. Look at you, still braced for more.<</if>><<if $flags.alessiaKeySchoolStance eq "record">>I told people we had a Friday plan. Left the fun parts out. Your ears are still red.<</if>>
<</actor>>
<<if $flags.alessiaKeyTouchConsent eq "touch" && $flags.alessiaKeyConsent neq "declined">>
<p class="delayed">At a long red light she reaches over. She does not look at your face. Two fingers press the cage through your trousers, firm enough that the steel bites and your breath stutters. She holds the pressure while the countdown ticks, then lifts away a second before green. She wipes nothing off her fingertips.</p>
<<actor bestfriend>>Over the fabric. Exactly what you allowed. Keep both hands on the wheel before you crash us into a metaphor.<</actor>>
<<else>>
<p class="delayed">She never touches you. She does not need to. Her knee angles toward the console, her voice stays low, and the empty space above your locked cock feels louder than contact would have.</p>
<<actor bestfriend>>Words only. You asked for that. Funny how quiet the cage gets when nobody is even helping it ache.<</actor>>
<</if>>
<<if $flags.alessiaKeyContactRule eq "midpoint">>
<<actor girlfriend>>(text) midpoint got it. key still where it should be? hour still open?<</actor>>
<<actor bestfriend>>(text) still on route. <<if $flags.alessiaKeyConsent eq "declined">>your key never left your neck. he's been checking ghosts tho 💅<<elseif $flags.alessiaKeyConsent eq "sealed">>seal intact. he keeps staring at plastic like it might confess.<<else>>key on my wrist. cage locked. face doing unpaid overtime.<</if>><</actor>>
<<elseif $flags.alessiaKeyContactRule eq "return-only">>
<p class="delayed">The phone stays dark on the dash. No check-in. No rescue text. Just road noise and the hour you chose to sit inside without a witness.</p>
<<elseif $flags.alessiaKeyContactRule eq "no-bait">>
<<actor bestfriend>>(text) on route. everything you get from me tonight is real. his face does the work 💅<</actor>>
<</if>>
<<if $flags.alessiaKeyParkStance eq "exact">>
<p class="delayed">She does not stretch the park terms. One route, one hour, nothing clever. You watch the wipers clear the red light and back.</p>
<<elseif $flags.alessiaKeyParkStance eq "trust">>
<p class="delayed">She stays inside the limit $girlfriendName set. No widening. No "just one more stop." The trust sits in the car with you like a third passenger.</p>
<<elseif $flags.alessiaKeyParkStance eq "repeat-boundary">>
<p class="delayed">Once, with no smile, she says the refusal back to you. You both have to hear it out loud. The key is still with $girlfriendName. The ride is still happening.</p>
<</if>>
<<if $flags.alessiaKeyPickupStance eq "limit">>
<<actor bestfriend>>You can still end this early. I heard you downstairs. I hear you breathing now. Say the word or stop pretending you might.<</actor>>
<<elseif $flags.alessiaKeyPickupStance eq "boundary">>
<<actor bestfriend>>I get the drive you actually gave me, and nothing after it.<</actor>>
<</if>>
<<actor bestfriend>>
<<if $flags.alessiaFridayDanceStance eq "private">>Phone's in my bag. You said no pictures last time. Still none tonight. You get the live version instead.<</if>>
<<if $flags.alessiaFridayDanceStance eq "look-away">>You looked away from the kiss last Friday. Cute. You cannot look away from this seat.<</if>>
<<if $flags.alessiaFridayDanceStance eq "watch">>Last Friday you watched me on the floor instead of pretending it was empty. Tonight, watch the road. I already know what your eyes do.<</if>>
<<if $flags.alessiaFridayPanties eq "refuse">>Bag stays at my feet. You already refused to carry my clothes. Don't start a new career as luggage now.<</if>>
Breathe, stray. The hour is not infinite. It just feels like it when you're locked.
<</actor>>
<span id="conv"></span>
<div id="options">
<<if $flags.alessiaKeyConsent neq "declined">>
<<you-choice "Keep it where I can see it.">>
<<actor bestfriend>><<if $flags.alessiaKeyConsent eq "sealed">>Pouch stays on my palm. Eyes on the road, not the plastic. I want you home in one piece so she can take it back.<</if>><<if $flags.alessiaKeyConsent eq "accepted">>Hand on the console. You still don't get to stare through every turn like the key might unlock you by looking hard enough.<</if>><</actor>>
[[Finish the route|Key for an hour return][$flags.alessiaKeyDriveResponse = "visible"; $flags.alessiaKeyDriveDone = true]]
<</you-choice>>
<<you-choice "Leave the key alone and finish the hour.">>
<<actor bestfriend>>Both hands on the wheel, and you stopped watching my wrist. That is the whole test.<</actor>>
[[Finish the route|Key for an hour return][$flags.alessiaKeyDriveResponse = "endure"; $flags.alessiaKeyDriveDone = true]]
<</you-choice>>
<<you-choice "Give it back now.">>
<<actor bestfriend>>Then the hour dies here. Pull into the forecourt and call her. I'll hand it over without a speech if you can manage the same.<</actor>>
[[End the loan|Key for an hour return][$flags.alessiaKeyDriveResponse = "return-early"; $flags.alessiaKeyDriveDone = true]]
<</you-choice>>
<<else>>
<<you-choice "I said no to the handoff. Stop testing whether I meant it.">>
<<actor bestfriend>>You meant it. Key stayed with her. I'm only testing whether you can finish one drive without turning a clean no into a whole crisis monologue.<</actor>>
[[Finish the route|Key for an hour return][$flags.alessiaKeyDriveResponse = "declined"; $flags.alessiaKeyDriveDone = true]]
<</you-choice>>
<<you-choice "The drive still feels different, even without the key.">>
<<actor bestfriend>>Because you spent a week putting it in my hand in your head. That part was free. And it was all yours.<</actor>>
[[Finish the route|Key for an hour return][$flags.alessiaKeyDriveResponse = "declined-reflect"; $flags.alessiaKeyDriveDone = true]]
<</you-choice>>
<</if>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyDriveDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-return.webp'" alt="The lit return point at the end of the drive">
<p class="scene-lead">The drive has not reached its return point.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyReturnDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath + 'story/owned/ch7/key-hour-return' + ($flags.alessiaKeyConsent === 'declined' ? '' : '-transfer') + '.webp'" alt="Jenny holding the returned cage key">
<p class="scene-lead"><<if $flags.alessiaKeyTransferOccurred>>The key is already back with $girlfriendName.<<else>>The drive is resolved, and the key never left $girlfriendName.<</if>></p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath + 'story/owned/ch7/key-hour-return' + ($flags.alessiaKeyConsent === 'declined' ? '' : '-transfer') + '.webp'" alt="Jenny receiving the cage key at the lit return point">
<h2 class="scene-title">At the return point</h2>
<p class="scene-lead">The car rolls under the white lights outside $girlfriendName's building. She is already at the entrance, coat open, eyes on the passenger door first and you second.</p>
<<if $flags.alessiaKeyConsent eq "declined">>
<p>She lifts the key from her own chain before you even open the door, holding it up so you both see it. It never left her. Your shoulders drop anyway, traitors.</p>
<<actor girlfriend>>You said no. I kept it. You still finished the drive. Come here, baby.<</actor>>
<<elseif $flags.alessiaKeyDriveResponse eq "return-early">>
<p>$bestfriendName steps out and drops <<if $flags.alessiaKeyConsent eq "sealed">>the sealed pouch<<else>>the key<</if>> straight into $girlfriendName's waiting hand. Twenty minutes. The metal changes owners like it never left home.</p>
<<actor girlfriend>>Twenty minutes. You cut it short, she gave it back, cage stayed locked. Don't look ashamed for using it.<</actor>>
<<elseif $flags.alessiaKeyConsent eq "sealed">>
<p>At exactly one hour, $bestfriendName lays the clear pouch in $girlfriendName's palm. $girlfriendName turns it under the light, finds the seal unbroken, and only then looks at your face.</p>
<<actor girlfriend>>Full hour. Seal untouched, just like you asked. Good boy for lasting it. Come upstairs.<</actor>>
<<else>>
<p>At exactly one hour, $bestfriendName drops the brass key into $girlfriendName's palm. $girlfriendName closes her fingers around it hard, then opens them just enough for you to see it home before she looks at you.</p>
<<actor girlfriend>>Full hour. She held it. You stayed locked. It came straight back to me. Don't make that face.<</actor>>
<</if>>
<<actor bestfriend>>
<<if $flags.alessiaKeyConsent eq "declined">>He checked your neck twice before we left and still looked wrecked with relief when the key came back. Strong work for a thing you never handed me.<</if>>
<<if $flags.alessiaKeyConsent neq "declined" && $flags.alessiaKeyDriveResponse eq "return-early">>Twenty minutes and one clean exit. I even returned him without an essay. You're welcome.<</if>>
<<if $flags.alessiaKeyConsent neq "declined" && $flags.alessiaKeyDriveResponse neq "return-early">>Timer was almost boring. His face did unpaid overtime the whole loop.<</if>>
I'm going. Try not to write me a thank-you note.
<</actor>>
<div class="continue-links">
<<link "Go upstairs together.">><<run setup.finishAlessiaKeyHour()>><<set $storyBeat = "alessia-key-returned">><<goto "Key for an hour debrief">><</link>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyReturnDone || $flags.alessiaKeyCurrentHolder neq "jenny">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-debrief.webp'" alt="Jenny waiting to debrief with the cage key">
<p class="scene-lead">The debrief waits until the drive is resolved and the key is back with $girlfriendName.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.alessiaKeyChapterDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-debrief.webp'" alt="Jenny wearing the cage key again">
<p class="scene-lead">The key is back on $girlfriendName's chain after the drive.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/ch7/key-hour-debrief.webp'" alt="Jenny holding the returned cage key during the private debrief">
<h2 class="scene-title">Home with her</h2>
<p class="scene-lead">Upstairs, $girlfriendName sits beside you with the key on her chain. She reads $bestfriendName's last message, then puts the phone face down.</p>
<<actor girlfriend>>
<<if $flags.alessiaKeyConsent eq "declined">>I kept the key. She got the ride you agreed to.<</if>>
<<if $flags.alessiaKeyDriveResponse eq "return-early">>You cut it short, and she handed it back when you asked. I'm glad you used the early-out.<</if>>
<<if $flags.alessiaHeldKeyForHour && $flags.alessiaKeyConsent eq "sealed">>The pouch came back sealed after the full hour. I checked it downstairs.<</if>>
<<if $flags.alessiaHeldKeyForHour && $flags.alessiaKeyConsent eq "accepted">>The full hour is over. You brought it home, and it's back on my chain.<</if>>
<</actor>>
<p class="delayed">She leans into your shoulder. <<if $flags.jennyCafeMomentSeen>>Her notebook is on the table, your folded bird still tucked inside.<</if>></p>
<<actor girlfriend>>I hate how quiet this place gets. I spent twenty minutes picking something to watch and then didn't watch it. Will you stay a bit?<</actor>>
<<actor you>>Yeah. Let me pick something terrible. Then we can both complain.<</actor>>
<<actor girlfriend>>You get ten minutes to find it. I have already wasted twenty.<</actor>>
<<if $world eq "anwo">>
<<actor-thought you>><<if $flags.anwoVirusForced>>The program changed her past while you watched it run.<<else>>You wanted her to look at you like this when you accepted that message.<</if>> Now she is asking you to stay. <<if $flags.jennyCafeMomentSeen>>You remember making that drawing with her. <</if>>You still don't know how to ask what she would have wanted without ANWO.<</actor-thought>>
<</if>>
<p class="delayed">She reaches for your hand while you find the remote. You have one last thing to say about the drive.</p>
<span id="conv"></span>
<div id="options">
<<if $flags.alessiaKeyConsent neq "declined">>
<<you-choice "I hated knowing she had it, and I kept driving.">>
<<actor girlfriend>>I heard you. We can talk more tomorrow if you want.<</actor>>
[[Close the report.|Post Key Sister Checkin][$flags.alessiaKeyDebriefStance = "endured"; $flags.alessiaKeyChapterDone = true; $flags.alessiaKeyCurrentHolder = "jenny"; $flags.alessiaKeyReturned = true; $flags.fridayDateStage = Math.max(7, $flags.fridayDateStage || 0); $storyBeat = "alessia-key-hour-complete"]]
<</you-choice>>
<<you-choice "The timer and the rules are why I agreed.">>
<<actor girlfriend>>I know. We needed to be clear before anyone left.<</actor>>
[[Close the report.|Post Key Sister Checkin][$flags.alessiaKeyDebriefStance = "structured"; $flags.alessiaKeyChapterDone = true; $flags.alessiaKeyCurrentHolder = "jenny"; $flags.alessiaKeyReturned = true; $flags.fridayDateStage = Math.max(7, $flags.fridayDateStage || 0); $storyBeat = "alessia-key-hour-complete"]]
<</you-choice>>
<<else>>
<<you-choice "I needed my no to stay simple.">>
<<actor girlfriend>>It stayed simple. She never held it. Now come here, I want some of that cushion.<</actor>>
[[Close the report.|Post Key Sister Checkin][$flags.alessiaKeyDebriefStance = "declined"; $flags.alessiaKeyChapterDone = true; $flags.alessiaKeyCurrentHolder = "jenny"; $flags.alessiaKeyReturned = true; $flags.fridayDateStage = Math.max(7, $flags.fridayDateStage || 0); $storyBeat = "alessia-key-hour-complete"]]
<</you-choice>>
<</if>>
<<you-choice "This does not become automatic next Friday.">>
<<actor girlfriend>><<if $flags.alessiaKeyConsent eq "declined">>One drive after a no is not a different answer next week. Come here. You did the harder thing today, and I want you close.<<else>>Finishing this loop does not make another loan automatic. Ask me again if you ever want it, and ask before you assume. You were straight with her, and I noticed.<</if>><</actor>>
[[Close the report.|Post Key Sister Checkin][$flags.alessiaKeyDebriefStance = "limit"; $flags.alessiaKeyChapterDone = true; $flags.alessiaKeyCurrentHolder = "jenny"; $flags.alessiaKeyReturned = true; $flags.fridayDateStage = Math.max(7, $flags.fridayDateStage || 0); $storyBeat = "alessia-key-hour-complete"]]
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.alessiaKeyChapterDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="Becky waiting in the bedroom doorway">
<p class="scene-lead">This conversation waits until the key-hour debrief is complete.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.postKeySisterCheckinDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="Becky after her morning check-in">
<p class="scene-lead">Your step-sister has already checked that the key came home with $girlfriendName.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<<if $gameDate.getDay() eq 5 && $gameDate.getHours() gte 18>><<run setup.advanceToNextMorning()>><</if>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="Becky leaning into the bedroom doorway on Saturday morning">
<h2 class="scene-title">The morning after</h2>
<p class="scene-lead">Saturday morning. Your room still smells like sleep and last night's nerves. $sisterName leans through the open door with a mug, having already watched $girlfriendName leave after breakfast with the brass key on her chain.</p>
<<actor sister>>
She still has it. You tracked that key all the way to the front door like a loser GPS, so whatever happened with $bestfriendName, nobody lost the important part.
I'm not asking for details. I just need to know if this turns into another week of you staring at your phone and forgetting the dishes exist.
<</actor>>
<<actor-thought you>>
<<if $flags.alessiaKeyConsent eq "declined">>She does not know there was no handoff. Only a drive built around a no you kept saying in your head.<</if>>
<<if $flags.alessiaKeyTransferOccurred && $flags.alessiaHeldKeyForHour>>She does not know $bestfriendName held the key for the full hour before dropping it back into $girlfriendName's hand.<</if>>
<<if $flags.alessiaKeyTransferOccurred && !$flags.alessiaHeldKeyForHour>>She does not know you cut the loan short, or how fast $girlfriendName took the key back.<</if>>
She only sees Saturday looking almost ordinary again. Your cage still remembers Friday. /* prose-ok: the 'again' is her noticing his week going back to normal */
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "The key came back. That's enough.">>
<<set $flags.postKeySisterCheckinDone = true>>
<<set $storyBeat = "post-key-sister-checkin">>
<<actor sister>>All right. Normal answer from the least normal guy in the house. Do the dishes before you invent another crisis.<</actor>>
<div class="delayed continue-links"><<if $work && $work neq "unemployed">>[[Get dressed and face Saturday|Home]]<<else>>[[Let Saturday settle|End of content chat]]<</if>></div>
<</you-choice>>
<<you-choice "The rules held. Leave it there.">>
<<set $flags.postKeySisterCheckinDone = true>>
<<set $storyBeat = "post-key-sister-checkin">>
<<actor sister>>Okay. You drew a line and they actually listened. Still weird. Clear, though. I can leave clear alone.<</actor>>
<div class="delayed continue-links"><<if $work && $work neq "unemployed">>[[Get dressed and face Saturday|Home]]<<else>>[[Let Saturday settle|End of content chat]]<</if>></div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<set $flags.caughtStroking1 = true>>
<<set $flags.anniversaryTonight = false>>
<<set $flags.questHint = "">>
<p class="delayed">
You told yourself it would take a minute. Class had left you shaking, and there was still time before you met her at the fountain.
The door opens while your hand is still moving.
</p>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/caught-door.jpg'" alt="caught by girlfriend">
<<actor girlfriend>>What the fuck, $youName?! Put that away!<</actor>>
<<actor girlfriend>>I thought you stopped doing this whenever you got bored.<</actor>>
<<actor you>>Ahh, $girlfriendName?! What are you doing here... who let you in?<</actor>>
<<actor girlfriend>>
$sisterName. Because I said I might come over for our anniversary. Because we said after school, fountain, then here, then us.
<</actor>>
<<actor girlfriend>>
I waited. You weren't there. So I came to find my boyfriend... and found this instead.
<</actor>>
<<actor-thought you>>
She took your arm in the hallway and asked you to show up for your anniversary. Instead, she has found you here with your cock still hard and dread tightening your stomach.
<</actor-thought>>
<div id="conv"></div>
<span id="options">
<<you-answer "I'm sorry, I was a mess after class. I panicked. 😞">>
<<actor girlfriend>>
If you were panicking, you could have texted me or shown up when you said you would.
But... at least you're admitting that you messed up.
<</actor>>
<<actor girlfriend>>
You still owe me tonight, and now we're doing it on my terms. Get down and take care of me.
[[Lick her |Lick GF][$girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)]]
<</actor>>
<</you-answer>>
<<you-answer "Where were YOU? I didn't see you at the fountain.">>
<<actor girlfriend>>
I was with $bullyName. He needed help with homework after that whole display in class. Fifteen minutes. You couldn't wait fifteen minutes?
<</actor>>
<<actor girlfriend>>
Maybe I should go. Celebrate alone.
<</actor>>
<</you-answer>>
<<you-choice "Please, don't go. I'll make it up to you.">>
<<actor girlfriend>>
Then stop talking and use your mouth. Our anniversary is still happening, but I'm deciding how.
[[Lick her |Lick GF]]
<</actor>>
<</you-choice>>
<<you-choice "Fine. Leave if you want.">>
<<actor girlfriend>>
Okay. Enjoy your hand.
<</actor>>
<<set $relationshipState = "no-favor">>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 3)>>
<p class="delayed">She doesn't slam the door. She closes it carefully, like she's already decided something about you.</p>
[[Bye |Are sleepy]]
<</you-choice>>
</span>
<</nobr>><<nobr>>
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'story/act2/lick-gf-jenny-bed.webp'" alt="Jenny on the bed">
<img @src="setup.ImagePath+'sex/licking.webp'">
<<set $relationshipState = "cum-covered-pussy-licked">>
<p class="delayed">
She sits on the edge of your bed and makes herself comfortable. Her fingers close in your hair with enough pressure to guide you down.
You kneel and put your mouth on her. Beneath the familiar taste is a richer, saltier edge that you cannot place.
You blame her pill and her stress, and you do not ask her about it.
</p>
<span id="conv"></span>
<span id="options">
<<you-choice "Honey... you smell different. Taste different.">>
<<set $flags.noticedSmell = true>>
<<actor girlfriend>>
Maybe because I stopped taking my pill. Or maybe because I've been wet since the hallway.
Stop diagnosing me and lick.
<</actor>>
<<actor-thought you>>
Her answer comes too quickly and sounds too practiced. You promise yourself you will think about it later, while her thighs tremble against your ears.
<</actor-thought>>
[[Continue licking and finish her off |Finish Licking]]
<</you-choice>>
<<you-choice "Keep licking. Don't ask.">>
<<set $flags.keptQuietSmell = true>>
<<actor girlfriend>>
Ahh... yes, $youName, just like that. Good...
<</actor>>
<<actor-thought you>>
You stay quiet because a question might stop her or drag the classroom back into the room with you.
You press closer and listen to her moan instead.
<</actor-thought>>
[[Finish her |Finish Licking]]
<</you-choice>>
</span>
<</nobr>><<nobr>>
<<actor girlfriend>>Ah... yes... I'm coming, $youName, don't you dare stop, <</actor>>
<p class="delayed">She comes hard, fisting the sheets while her thighs lock around your head and hold you there.</p>
<img @src="setup.ImagePath+'sex/orgasm-licking.webp'">
<div id="conv"></div>
<span id='options'>
<<identity-choice resistance "What about me?">>
<<actor girlfriend>>
For what? You already took care of yourself. That's the problem.
<</actor>>
<<if $flags.noticedSmell>>
<<actor-thought you>>
Her taste still sits on your tongue, but her explanation does not settle. You cannot bring yourself to press her tonight.
<</actor-thought>>
<<else>>
<<actor-thought you>>
Your cock throbs without being touched. Being ignored on your own anniversary should kill the mood, but instead it makes you harder.
<</actor-thought>>
<</if>>
[[Bye |Jerk off][$aroused = 80; _ab = setup.applyIdentity("act2-catch-assert")]]
<</identity-choice>>
<<identity-choice devotion "Hope that made up for it...">>
<<if $flags.keptQuietSmell>>
<<actor girlfriend>>
It helped. You're good when you shut up and work. We should do that more.
It's late. I should go. Text me tomorrow, and keep your hands off yourself if you can manage it.
<</actor>>
[[Bye |Are sleepy][_ab = setup.applyIdentity("act2-catch-appease"); $girlfriendTrustLevel = setup.changeFavor(1); $aroused = 40]]
<<else>>
<<actor girlfriend>>
That was pretty good. We should do it more often. It's late... I should go home.
Next time... show up when you say you will.
<</actor>>
[[Bye |Are sleepy][_ab = setup.applyIdentity("act2-catch-appease"); $aroused = 50]]
<</if>>
<</identity-choice>>
</span>
<</nobr>><<nobr>>
<<set $flags.caughtStroking2 = true>>
<p class="delayed">
$teacherName's lecture about locking up smaller boys is still in your head, along with her claim that it protects women from bad decisions.
<<if $flags.day25TriedToObey>>You made it through the shower, your messages, and nearly two hours in bed. Then you told yourself that checking the ache was not the same as stroking. The first touch lasted a second. The next one did not.<<else>>$girlfriendName said things would be fine as long as you followed the rules. You convince yourself that one stroke cannot count, then let yourself take another.<</if>>
The door opens without a knock.
</p>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/caught-door.jpg'" alt="caught again">
<<actor girlfriend>><<if $flags.caughtStroking1>>Are you serious? You couldn't even last one day?<<else>>Are you serious? I gave you one rule for one evening.<</if>><</actor>>
<<actor-thought you>>
Her voice cracks on the last word. Beneath the anger, you hear that she has reached a decision.
<</actor-thought>>
<div id="conv"></div>
<div id="options">
<<if $flags.caughtStroking1>>
<<you-answer "You didn't even finish me last time... I was still dying, ">>
<<actor girlfriend>>That isn't an excuse. We were supposed to continue together, not have you sneak off and do this again.<</actor>>
<<actor girlfriend>>$teacherName was right about one thing. Some boys can't be trusted with their own dicks.<</actor>>
<</you-answer>>
<<else>>
<<you-answer "I tried to stop. I really did.">>
<<actor girlfriend>>Trying until you wanted it badly enough is not the same as keeping the rule.<</actor>>
<<actor girlfriend>>$teacherName was right about one thing. Some boys can't be trusted with their own dicks.<</actor>>
<</you-answer>>
<</if>>
<<you-choice "Stay silent. Face burning.">>
<p class="delayed">Footsteps approach in the hall, and you hear $sisterName before she reaches the doorway.</p>
<<actor sister>>Okay, what is the screaming about, oh.<</actor>>
<<actor girlfriend>><<if $flags.caughtStroking1>>Your brother is a jerk-junkie. Even after our anniversary and what happened in class, he still can't keep his hand off it.<<else>>Your brother got one rule after class and still couldn't keep his hand off it.<</if>><</actor>>
<<actor sister>>
Bro. You have a girlfriend and you still live in your palm? That's actually sad.
My ex was the same. Until someone took the option away.
<</actor>>
<<actor sister>>
$girlfriendName, come with me a sec. I have something that fixes this kind of boy. Quietly.
<</actor>>
<<actor-thought you>>
$sisterName already had her answer ready. She was waiting for a reason to use it.
<</actor-thought>>
<span class="delayed">They leave together and lower their voices in the hall. By the time they reach $sisterName's room, they sound friendly.</span>
[[*Follow them quietly*|Girlfriend receives cage][$followedSisterReceivingCage to true]]
[[*Stay. Pretend this isn't happening.*|Girlfriend puts on the cage][$followedSisterReceivingCage to false]]
<</you-choice>>
</div>
<</nobr>><<nobr>>
<p class="delayed">
You follow them until you reach $sisterName's half-open door. You know you should turn back, but you lean closer to listen.
</p>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/cage-sister-handoff.jpg'" alt="sister offers the cage">
<<actor sister>>
Use this one. It's small enough that he can't slip out. He'll complain for a week, then start begging whenever you pay attention to him.
<</actor>>
<<actor girlfriend>>
We covered chastity and keyholder control in class today. They called it beta management.
<</actor>>
<<actor sister>>
Bingo. Once it's on, he can't stroke without you knowing. You hold the key and decide when he gets any relief.
I used something like this on my ex. He cried the first night. On night three he was texting me "please" like it was a love language.
<</actor>>
<<actor girlfriend>>
That might actually work for him. Maybe for us too.
<</actor>>
<<actor sister>>
Make him choose between wearing it and losing you. He'll agree before he realizes that was the only choice you gave him.
<</actor>>
<img @src="setup.ImagePath+'toys/chastity.png'" class="delayed">
<p class="delayed">Your mouth goes dry. Under your clothes you are still hard, and your body has missed every word she said.</p>
[[*Run back to your room*|Girlfriend puts on the cage]]
<</nobr>><<nobr>>
<<if $followedSisterReceivingCage>>
<p class="delayed">You make it back to the bed before they return and sit there like you never left. Neither of them checks.</p>
<<else>>
<p class="delayed">The wait drags on. When they return, $girlfriendName looks calmer because she has decided exactly what she is going to do.</p>
<</if>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="keyholder ready to lock">
<<actor girlfriend>>Look what $sisterName gave me.<</actor>>
<img @src="setup.ImagePath+'toys/chastity.png'" class="delayed">
<<if ($alphaBeta || 0) gte 4>>
<<actor girlfriend>>You've been soft for me for a while. This just makes it honest. Pants down.<</actor>>
<<elseif ($alphaBeta || 0) lte -4>>
<<actor girlfriend>>You can fight every label at school. In this room, you still broke my rule. Pants down.<</actor>>
<<elseif $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>I'm done arguing. This goes on now.<</actor>>
<<elseif $followedSisterReceivingCage>>
<<actor girlfriend>>You heard enough, didn't you? Good. Then you know I'm not bluffing.<</actor>>
<<else>>
<<actor girlfriend>>Class said lock what can't be trusted. You proved the point. Let's put it on.<</actor>>
<</if>>
<<actor sister>>
I'll be in my room. Don't break my toy on day one, $girlfriendName. And bro... breathe. It's smaller than your ego.
<</actor>>
<span class="delayed">$sisterName leaves with a little wave and closes her door. You are alone with $girlfriendName, but the room no longer feels private.</span>
<span id="conv"></span>
<span id="options">
<<you-answer "What is this for?">>
<<actor girlfriend>>
It's a chastity cage that locks around your cock. I keep the key, so you only get relief when I decide you deserve it.
<</actor>>
<</you-answer>>
<<you-answer "That looks like it hurts.">>
<<actor girlfriend>>
$sisterName said it only hurts at first. Then everything gets quieter, and you can focus on me instead of touching yourself.
<</actor>>
<</you-answer>>
<<you-choice "Okay... if it means you'll stay. 🙁">>
<<actor girlfriend>>
Smart choice. You picked us, and I'll remember that you said it willingly.
<</actor>>
[[Put it on|Girlfriend locked you up][$cageAcceptance = "reluctant"]]
<</you-choice>>
<<identity-choice devotion "If you want me locked... I want it too. 😳">>
<<if $girlfriendTrustLevel gt 5>>
<<actor girlfriend>>
Oh. Look at you trying to make it romantic. Come here.
<</actor>>
<<else>>
<<actor girlfriend>>
Finally, you're being useful. Don't take it back when you hear the click.
<</actor>>
<</if>>
[[Put it on|Girlfriend locked you up][$cageAcceptance = "eager"; _ab = setup.applyIdentity("act2-cage-eager"); $girlfriendTrustLevel = setup.changeFavor(1)]]
<</identity-choice>>
<<you-choice "No. I'm not putting that on.">>
<<actor girlfriend>>
Are you sure? $teacherName was right. Without this, I won't stay. I'm not competing with your hand anymore.
<</actor>>
[[Okay... then put it on. 🙁|Girlfriend locked you up][$cageAcceptance = "forced"]]
<<identity-link "resistance" "Then go. I don't need you." "End lost girlfriend">><<set $cageAcceptance = "refused">><<run setup.applyIdentity("act2-cage-refuse")>><<set $flags.mustResolveCage = false>><<set $flags.questHint = "">><</identity-link>>
<</you-choice>>
</span>
<</nobr>><<nobr>>
<<set $flags.mustResolveCage = false>>
<<set $flags.questHint = "">>
<<set $flags.day25RulesWarning = false>>
<img @src="setup.ImagePath+'gf-you/lockup.webp'">
<p class="delayed">
The metal is cold against your skin. Her fingers move carefully as she checks the fit, settles you inside, and closes the lock.
The click is quiet, yet it seems to fill the room.
</p>
<<if $cageAcceptance eq "eager">>
<<actor girlfriend>>
Hear that? You asked for this. You're mine now, and your hand doesn't get a say anymore.
[[Let's have some fun][$caged = true; $strokeState = "caged"]]
<</actor>>
<<elseif $cageAcceptance eq "reluctant">>
<<actor girlfriend>>
There. Breathe. I'm proud of you for choosing us. We'll learn the rules together.
[[Let's have some fun][$caged = true; $strokeState = "caged"]]
<</actor>>
<<else>>
<<actor girlfriend>>
That's the last time I hear "just once".
[[Let's have some fun][$caged = true; $strokeState = "caged"]]
<</actor>>
<</if>>
<</nobr>><<nobr>>
<span id="conv">
<<if $cageAcceptance eq "eager">>
<<actor girlfriend>>You wanted the cage. Now show me that mouth still works when the rest of you doesn't.<</actor>>
<<elseif $cageAcceptance eq "reluctant">>
<<actor girlfriend>>You can't fuck me with that on. So you serve. That's how we keep this fair... for me.<</actor>>
<<else>>
<<actor girlfriend>>Because you can't have sex with that thing on, you pleasure me another way. On your knees is fine.<</actor>>
<</if>>
</span>
<<actor-thought you>>
The cage is already warming against your skin. Every pulse reminds you that the key is in her hand, beyond your reach.
You could still refuse and ruin whatever remains between you. Before you finish arguing with yourself, your knees touch the floor.
<</actor-thought>>
<span id="options">
<<you-choice "Yes, $girlfriendName... 😕">>
<<if $cageAcceptance eq "eager">>
<<actor girlfriend>>
Ahhh... see? This is what you're for, and it already feels better. Don't you dare stop when I shake.
<</actor>>
<<elseif $flags.noticedSmell>>
<<actor girlfriend>>
Ahhh yes... just like that. Don't think or sniff for stories, just serve.
<</actor>>
<<else>>
<<actor girlfriend>>
Ahhh... yes, you're getting better. This is better than sex with you ever was.
<</actor>>
<</if>>
<img class="delayed" @src="setup.ImagePath+'gf-you/chastity-lick.webp'" class="delayed">
<<actor girlfriend>>
Mmm... stay right there. You're much easier to enjoy like this, honey.
Keep the cage clean. Keep your hands off it. And stay awake, I'm not done owning tonight.
[[Continue, keyholder night|Cage rules night][$refusedToLick = false; $aroused = 70; $flags.firstServiceDone = true; $storyAct = 3]]
<</actor>>
<</you-choice>>
<<you-choice "No. If I can't cum, you don't get to either.">>
<<if $cageAcceptance eq "eager">>
<<actor girlfriend>>
You asked me to lock you, and now you're refusing? Fine. Stay frustrated while I explain the rules.
[[Continue, keyholder night|Cage rules night][$refusedToLick = true; $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 2); $aroused = 90; $storyAct = 3]]
<</actor>>
<<else>>
<<actor girlfriend>>
If that's what you wish for. Enjoy the ache. I still have the key.
Rules first. Then you can be mad about them.
[[Continue, keyholder night|Cage rules night][$refusedToLick = true; $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1); $aroused = 85; $storyAct = 3]]
<</actor>>
<</if>>
<</you-choice>>
</span>
<</nobr>><<nobr>>
<<set $flags.questHint = "">>
<<set $storyAct = 3>>
<<set $storyBeat = "key-rules">>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-key-smile.jpeg'" alt="keyholder with key">
<p class="delayed">That evening, $girlfriendName sits on your bed in blue and lets the key swing from one finger. You have been locked long enough for the metal to feel warm.</p>
<<actor girlfriend>>
We need to talk about how this works. Listen, then tell me you understand.
<</actor>>
<<actor girlfriend>>
You do not try to unlock it, even to clean or check the fit. You ask me.
If you're desperate, tell me. I might tease you, and I might make you wait, but I want to know.
When I go out, you stay home unless I say otherwise. No following me and no checking up on me.
You can use your mouth and hands on me. Toys are my call, and your cock stays locked until I decide differently.
<</actor>>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-bed-sit.jpg'" alt="keyholder on the bed">
<img class="delayed centered" @src="setup.ImagePath+'you/locked1.webp'" alt="already locked">
<<actor-thought you>>
She says it in the voice she uses for the shopping list. The key turns between her fingers while she waits for an answer.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "I understand. You're the keyholder.">>
<<set $flags.keyRulesDone = true>>
<<set $flags.keyRulesStance = "devotion">>
<<actor girlfriend>>
There. You listen better when I have the key.
<</actor>>
<<run setup.applyIdentity("owned-rules-accept")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(8)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<if !$flags.firstServiceDone>>
<div class="delayed">[[She isn't finished with you|Caged service]]</div>
<<else>>
<div class="delayed">[[Sleep on it|Home]]</div>
<</if>>
<</identity-choice>>
<<identity-choice resistance "This is temporary. Right?">>
<<set $flags.keyRulesDone = true>>
<<set $flags.keyRulesStance = "resistance">>
<<actor girlfriend>>
You can call it temporary if that helps.
I'm keeping the key until I decide I'm done with it.
<</actor>>
<<run setup.applyIdentity("owned-rules-temporary")>>
<<run setup.nudgeArousal(10)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<if !$flags.firstServiceDone>>
<div class="delayed">[[She pulls you closer anyway|Caged service]]</div>
<<else>>
<div class="delayed">[[Home with the argument unfinished|Home]]</div>
<</if>>
<</identity-choice>>
<<you-choice "What do I get if I make this easy for you?">>
<<set $flags.keyRulesDone = true>>
<<set $flags.keyRulesStance = "pragmatic">>
<<actor girlfriend>>
You get honesty about my plans, favors when you earn them, and fewer surprises.
Start by making me come. Then you can ask for your first favor.
<</actor>>
<<run setup.nudgeArousal(12)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<if !$flags.firstServiceDone>>
<div class="delayed">[[Earn the first favor|Caged service]]</div>
<<else>>
<div class="delayed">[[Home|Home]]</div>
<</if>>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/night-out-leave.jpg'" alt="Jenny dressed to leave for the night">
<<if setup.isResistant() && $publicAlphaBeta lt 0>>
<p class="delayed">The public list calls you Alpha. Your private choices have pushed toward Resistance. None of that stops $girlfriendName from fastening the cage key around her neck and reaching for her bag.</p>
<<elseif setup.isResistant()>>
<p class="delayed">You have resisted her rules whenever she made you choose. She still fastens the cage key around her neck and reaches for her bag.</p>
<<else>>
<p class="delayed">$girlfriendName fastens the cage key around her neck, checks herself in the mirror, and reaches for her bag.</p>
<</if>>
<<actor girlfriend>>
Girls' night. The cage stays on, and you stay home. Do not wait up pretending you are not curious.
<</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice resistance "This is not okay with me.">>
<<set $flags.nightOutDepartureDone = true>>
<<set $flags.nightOutDepartureStance = "objected">>
<<run setup.applyIdentity("owned-night-confront")>>
<<actor girlfriend>>
I heard you. I am still going. We can argue when I get home, if you are still awake.
<</actor>>
<div class="delayed">[[Let the door close|Wait until evening]]</div>
<</identity-choice>>
<<you-choice "Let her leave. Save the argument for later.">>
<<set $flags.nightOutDepartureDone = true>>
<<set $flags.nightOutDepartureStance = "quiet">>
<<actor girlfriend>>
Then lock the door behind me, baby.
<</actor>>
<div class="delayed">[[Listen to her leave|Wait until evening]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.noticedSmell = true>>
<<set $storyBeat = "night-out">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/night-out-wait.jpg'" alt="waiting locked at home">
<<if $flags.nightOutDepartureStance eq "objected">>
<p class="delayed">You told her the night out was not okay. She left anyway. It is late now, and every shift on the sofa presses the cage against you.</p>
<<else>>
<p class="delayed">She said “girls' night.” It is late now, and every shift on the sofa presses the cage against you.</p>
<</if>>
<<actor-thought you>>
You check your phone again, then picture her with someone who can actually fuck her. Neither makes the waiting easier.
<</actor-thought>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/owned/night-out-leave.jpg'" alt="she left for the night">
<p class="delayed">A key turns in the front door. $girlfriendName comes in with messy hair and flushed cheeks, her cage key hanging between her tits. She smells like night air and someone else's cologne.</p>
<img class="hero-img centered porn-frame delayed" @src="setup.ImagePath+'cuckold/night-out-return.jpg'" alt="she comes home ruined and proud">
<img class="delayed centered" @src="setup.ImagePath+'cuckold/x-tease-'+ random(1, 4) +'.gif'" alt="">
<<actor girlfriend>>
<<if $flags.nightOutDepartureStance eq "objected">>Still up? You can say you objected again, if it makes you feel better.<br><<else>>Still up? Of course you are. You have been sitting here waiting with that thing locked all night.<br><</if>>
I had fun. You look like you've been imagining every minute of it.
If you're good, maybe I let you clean me up later.
<</actor>>
<span id="conv"></span>
<div id="options">
<<if $flags.nightOutDepartureStance eq "objected">>
<<you-choice "No. No more men. If we stay together, that stops.">>
<<set $flags.nightOutSmellDone = true>>
<<set $flags.noAlphaBoundary = true>>
<<set $flags.noAlphaBoundaryOrigin = "night-out">>
<<set $flags.keptQuietSmell = false>>
<<actor girlfriend>>
Okay. I should not have walked out after you said it was not okay.
No $bullyName, no $exfriendName, no other guy. I keep your key, but I do not get to turn that into permission you never gave me.
<</actor>>
<p class="delayed">She takes the key from her neck and closes her hand around it. She does not unlock you. For once, that feels like two separate decisions.</p>
<<run setup.nudgeArousal(6)>>
<div class="delayed">[[Finish the conversation in the morning|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</you-choice>>
<<you-choice "You cheated after I said no. We're done.">>
<<actor girlfriend>>
I cannot tell you that you imagined it. You said no before I left, and I went anyway.
If you mean this, I will unlock you. I will not make you stay just because I have the key.
<</actor>>
<p class="delayed">Her fingers close around the key. Ending the relationship means ending the cage with it.</p>
<div class="delayed continue-links">
<<link "Confirm: end the relationship" "End cheated breakup">><<set $flags.cheatingBreakupDone = true>><<set $flags.nightOutSmellDone = true>><<set $caged = false>><<set $strokeState = "free">><<set $relationshipState = "broken-up">><<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>><</link>>
[[Do not confirm|Night out return]]
</div>
<</you-choice>>
<<else>>
<<identity-choice resistance "I… I can smell him on you.">>
<<set $flags.nightOutSmellDone = true>>
<<actor girlfriend>>
Then you have a working nose. Use your mouth for something useful later, not questions.
<</actor>>
<<set $flags.keptQuietSmell = false>>
<<run setup.applyIdentity("owned-night-confront")>>
<<run setup.peakArousal()>>
<div class="delayed">[[She pushes you to your knees|Caged service][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<</if>>
<<identity-choice devotion "Did you have a good night?">>
<<set $flags.nightOutSmellDone = true>>
<<actor girlfriend>>
Mm. Better than staying home. You can ask me about it tomorrow, when you are less worked up.
<</actor>>
<<set $flags.keptQuietSmell = true>>
<<run setup.applyIdentity("owned-night-approve")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(12)>>
<div class="delayed">[[Kiss her cheek. Taste the night.|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<you-choice "Say nothing. Stare at the key.">>
<<set $flags.nightOutSmellDone = true>>
<<actor girlfriend>>
That face tells me enough. Go to bed and leave the cage alone.
<</actor>>
<<set $flags.keptQuietSmell = true>>
<<run setup.peakArousal()>>
<div class="delayed">[[To bed aching|Home][$gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-key-smile.jpeg'" alt="Jenny keeps the cage key">
<p class="delayed">In the morning, $girlfriendName sits beside you with the key resting against her chest. The argument is over. The boundary is not.</p>
<<actor girlfriend>>
<<if $flags.noAlphaBoundaryOrigin eq "night-out">>I ignored you before I left. I will not pretend the apology fixes that, but I heard the boundary. No $bullyName, no $exfriendName, no replacement waiting offscreen.<<elseif $flags.noAlphaBoundaryOrigin eq "ultimate-stop">>You stopped the room and I listened. No $bullyName, no $exfriendName, no replacement waiting offscreen.<<else>>I heard the boundary. No $bullyName, no $exfriendName, no replacement waiting offscreen.<</if>>
You are still my boyfriend. I am still your keyholder, if that is what we choose together.
<</actor>>
<<actor-thought you>>
The cage is still locked. Her thumb still circles the key. The difference is that neither of you is pretending the metal answered a question about other men.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Keep the cage. Keep us. No other men.">>
<<set $flags.noAlphaRelationshipDone = true>>
<<set $storyBeat = "no-alpha-keyholder">>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>
Then those are the rules. I tease you, I decide when you unlock, and Friday stays ours.
If either of us wants to change that, we talk first. No surprises.
<</actor>>
<div class="delayed">[[Continue your life together|Home]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.cagedWaitDone = true>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="waiting locked">
<p class="delayed">She texts: <em>out. be good. no touching what you can't reach anyway 🔐</em></p>
<p class="delayed">An hour of nothing. Every shift of fabric reminds you. Your brain helpfully supplies what she might be doing.</p>
<img class="delayed centered" @src="setup.ImagePath+'cuckold/x-sex-'+ random(1, 5) +'.gif'" alt="">
<<actor girlfriend>>
(text) still waiting? good, because $bullyName says hi... or maybe he doesn't.
don't even try to cum without me, although we both know you can't. 😈
<</actor>>
<<run setup.peakArousal()>>
<div class="continue-links">
[[Try to stroke the cage anyway|Stroke cage]]
[[Lie down and suffer|Home][$gameDate = setup.changeDate($gameDate, 'hours', 2)]]
</div>
</div>
<</nobr>><<nobr>>
<<if $flags.cagedServiceDone>>
<<set $storyBeat = "first-service">>
<<include "Home">>
<<else>>
<<set $storyBeat = "first-service">>
<<set _rulesStance = $flags.keyRulesStance || "legacy">>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-bed-sit.jpg'" alt="she sits you down">
<<if _rulesStance eq "devotion">>
<p class="delayed">She lets you kiss the key before placing it on the nightstand. Then she pulls your face between her thighs with a pleased little smile.</p>
<<elseif _rulesStance eq "resistance">>
<p class="delayed">She leaves the argument unfinished. The key lands on the nightstand, and she makes you look at it before pulling your face between her thighs.</p>
<<elseif _rulesStance eq "pragmatic">>
<p class="delayed">She places the key on the nightstand like the first term in your deal. One favor, if you make her come and follow every rule she just gave you.</p>
<<else>>
<p class="delayed">She leaves you dressed and pulls your face between her thighs. Her fingers tighten in your hair. The keys stay on the nightstand, close enough to see and too far to touch.</p>
<</if>>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'gf-you/service-facesit.jpg'" alt="service">
<<actor girlfriend>>
<<if _rulesStance eq "devotion">>Good boy. That's it, slower. Show me.<br><<elseif _rulesStance eq "resistance">>You can keep calling it temporary. Right now, the key stays there and your mouth stays here.<br><<elseif _rulesStance eq "pragmatic">>Make me come, follow the rules, and I'll owe you one.<br><<else>>That's it. Slower.<br><</if>>
Keep licking. Every time that cage clinks, I want you to remember which one of us gets to finish.
<</actor>>
<<actor-thought you>>
The metal presses into your thighs while she grinds against your mouth. She can feel every useless twitch through your clothes.
<</actor-thought>>
<img class="delayed centered" @src="setup.ImagePath+'gf-you/chastity-lick.webp'" alt="">
<img class="delayed centered" @src="setup.ImagePath+'sex/licking.webp'" alt="">
<img class="delayed centered" @src="setup.ImagePath+'sex/orgasm-licking.webp'" alt="">
<<actor girlfriend>>
<<if _rulesStance eq "pragmatic">>You earned the favor. Ask when it matters, not while your face is wet.<br><<elseif _rulesStance eq "resistance">>You kept your boundary. I kept the key. We can argue again tomorrow.<br><<else>>Good. Stay there.<br><</if>>
You are not getting the key tonight. When $sisterName sees you tomorrow, try not to look so guilty. She'll know anyway.
<</actor>>
<<set $aroused = 90>>
<<if _rulesStance neq "resistance">><<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>><</if>>
<div class="continue-links">
[[Wipe your mouth and go downstairs.|Home][$flags.cagedServiceDone = true; $flags.firstServiceDone = true; $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<set $flags.cagedVoyeurDone = true>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-park-witness.jpg'" alt="park voyeur tension">
<p class="delayed">You only meant to walk off the ache. Past the bushes you hear a laugh that is not careful, a rhythm that is not yours.</p>
<img class="delayed centered" @src="setup.ImagePath+'cuckold/x-sex-'+ random(1, 5) +'.gif'" alt="">
<<actor-thought you>>
You can't see faces. You don't need to. In your head it is $girlfriendName and someone built like an ANWO poster.
Your cock jerks inside the cage and presses painfully against your jeans while you watch.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Stay. Watch.">>
<<actor-thought you>>
Shame and heat braid together. You leave only when your legs shake.
<</actor-thought>>
<<run setup.applyIdentity("owned-park-watch")>>
<<run setup.peakArousal()>>
<div class="delayed">[[Flee home throbbing|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<identity-choice resistance "Leave before you confirm anything.">>
<<actor-thought you>>
You call it self-defense as you walk away, though the pressure under your jeans follows you home.
<</actor-thought>>
<<run setup.applyIdentity("owned-park-leave")>>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[Home before the image sticks|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $storyBeat = "alpha-proof">>
/* Caption Snap rewards only come from Edge Report. */
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
<div>
<i class="fa-solid fa-wifi fa-lg" style="position: relative; bottom: 3px; margin-right: 3px"></i>
</div>
</div>
<div class="messages">
<<actor girlfriend>>
Don't freak out.
Or do. I like when you freak out quietly.
<</actor>>
<<actor girlfriend>>
(text) Had a "study" thing.
$bullyName walked me halfway to the car.
He asked if you were still "doing the locked experiment."
I said you're still doing what I tell you. 🔐
<</actor>>
<<actor girlfriend>>
Then I sent him the back-seat photo.
I told him to give me his number if he wanted to take me somewhere quieter.
<</actor>>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/alpha-proof-car.jpg'" alt="parking lot proof energy">
<<actor girlfriend>>
That photo was not for you, baby. I wanted him to know I was interested.
Notice what's not in the shot?
Your cock. Because it's not invited.
<</actor>>
<<actor girlfriend>>
(text) Sleep hard. Text me "yes keyholder" if you're still mine.
I want my answer before you sleep. 😘
<</actor>>
<<actor-thought you>>
She called it studying. He only walked her halfway. Now she is in a car asking for his number.
You should put the phone down. Instead, you type with the cage digging into your lap.
<</actor-thought>>
</div>
<section class="phone-nav">
<div class="continue-links">
<<identity-link "devotion" "yes keyholder" "Home">><<set $flags.alphaProofDone = true>><<run setup.applyIdentity("owned-proof-answer")>><<set $aroused = $aroused gte 90 ? 100 : $aroused + 20>><<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>><</identity-link>>
<<identity-link "resistance" "Seen" "Home">><<set $flags.alphaProofDone = true>><<run setup.applyIdentity("owned-proof-seen")>><<set $aroused = $aroused gte 90 ? 100 : $aroused + 15>><</identity-link>>
</div>
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>>
/* === Act III: Proof becomes presence === */<<nobr>>
<<set $storyBeat = "hallway-hierarchy">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/hallway-hierarchy.jpg'" alt="her with him in the hallway">
<p class="delayed">Between classes the hallway is a river of bodies. You almost walk past them, $girlfriendName and $bullyName, close enough that her shoulder brushes his chest when she laughs.</p>
<<actor-thought you>>
The cage sits warm under your clothes while she laughs against his chest. After the photo she sent him, you cannot pretend he knows nothing about the lock.
<</actor-thought>>
<<actor bully>>
Hey... locked experiment still going? She said you're still following her rules.
<</actor>>
<<actor girlfriend>>
He's right here. Don't make it a scene. Walk normal, baby.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "Freeze. Nod. Say nothing.">>
<<set $flags.hallwayHierarchyDone = true>>
<<run setup.applyRecognition("owned-hallway-freeze")>>
<<actor bully>>
Damn, you really can't talk around me. Catch you later.
<</actor>>
<<actor girlfriend>>
Go to class. Text me when you're home.
<</actor>>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[Escape into the crowd|Home][$gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<</you-choice>>
<<you-choice "We're fine. Project stuff.">>
<<set $flags.hallwayHierarchyDone = true>>
<<actor bully>>
Sure. Project stuff. Try not to walk so stiff.
<</actor>>
<<actor girlfriend>>
You got a sentence out. Come on, we're going to be late.
<</actor>>
<<set $aroused = $aroused gte 80 ? 100 : $aroused + 20>>
<div class="delayed">[[Leave while you still have a voice|Home][$gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<</you-choice>>
<<identity-choice resistance "Walk past like you didn't see them.">>
<<set $flags.hallwayHierarchyDone = true>>
<<actor girlfriend>>
$youName, really? Avoiding me in public? We'll talk at home.
<</actor>>
<<actor-thought you>>
You feel his eyes on your back. The cage taps against you once when you hurry, loud enough to make your face burn.
<</actor-thought>>
<<run setup.applyIdentity("owned-hallway-avoid")>>
<<run setup.applyRecognition("owned-hallway-avoid")>>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)>>
<<run setup.nudgeArousal(8)>>
<div class="delayed">[[Home with a pit in your stomach|Home][$gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $storyBeat = "bully-check-in">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/bully-vending.jpg'" alt="bully by the vending machines">
<p class="delayed">You are alone by the vending machines until $bullyName walks over and blocks the buttons with one hand.</p>
<<actor bully>>
Relax. I only came for a drink. She told me about the lock, though. ANWO homework, right?
Had to see if you could still walk normal.
<</actor>>
<<if $cageAcceptance eq "eager">>
<<actor bully>>
She said you asked for it. Damn. You really wanted that cage, huh?
<</actor>>
<<elseif $cageAcceptance eq "forced">>
<<actor bully>>
She said you fought her on it. Guess that went well.
<</actor>>
<<elseif $cageAcceptance eq "reluctant">>
<<actor bully>>
She said you took some convincing. Your face says you still do.
<</actor>>
<<else>>
<<actor bully>>
Whatever you two call it, that look on your face is doing all the talking.
<</actor>>
<</if>>
<<if setup.isResist()>>
<<actor-thought you>>
You want to tell him to back off. You hear people at the end of the hall and lower your voice instead.
<</actor-thought>>
<<elseif setup.isEager()>>
<<actor-thought you>>
Part of you wants him to keep talking. Your cock swells painfully at the thought.
<</actor-thought>>
<<else>>
<<actor-thought you>>
He is barely trying to be mean. That somehow makes your face burn more.
<</actor-thought>>
<</if>>
<span id="conv"></span>
<div id="options">
<<identity-choice resistance "It's private. Between me and her.">>
<<set $flags.bullyCheckInDone = true>>
<<actor bully>>
Private? She sent me proof. Relax, I don't want your key.
Tell her I said hi. She likes watching you get nervous.
<</actor>>
<<run setup.applyIdentity("owned-bully-private")>>
<<run setup.applyRecognition("owned-bully-private")>>
<<run setup.nudgeArousal(8)>>
<div class="delayed">[[Get out before your voice cracks|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<identity-choice devotion "I'm… taking it seriously.">>
<<set $flags.bullyCheckInDone = true>>
<<actor bully>>
Yeah, I can tell. Try not to waddle in the hall, man.
She'll get mad if you embarrass her.
<</actor>>
<<run setup.applyIdentity("owned-bully-serious")>>
<<run setup.applyRecognition("owned-bully-serious")>>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[Nod and leave before your face gives you away|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<you-choice "Mumble something and stare at the floor.">>
<<set $flags.bullyCheckInDone = true>>
<<run setup.applyRecognition("owned-bully-mumble")>>
<<actor bully>>
There it is. The quiet little locked look. See you around, experiment.
<</actor>>
<<run setup.peakArousal()>>
<div class="delayed">[[Flee with your ears ringing|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $storyBeat = "bully-presence">>
<<set $storyAct = 3>>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-bed-stand.jpg'" alt="keyholder debrief">
<p class="delayed">That evening, $girlfriendName sits against the bed frame with her legs open. She drops the key on the nightstand and crooks one finger at you.</p>
<<actor girlfriend>>
So, he talked to you in the hallway by the vending machines.
I know... Because he texted me <em>your face</em> like a weather report.
<</actor>>
<<if $flags.keptQuietSmell>>
<<actor girlfriend>>
You keep hoping nobody notices. He did.
<</actor>>
<<elseif $flags.noticedSmell || $flags.nightOutSmellDone>>
<<actor girlfriend>>
Don't do the shocked eyes. You already had a nose full of the truth once.
Today he got to watch your face too.
<</actor>>
<<else>>
<<actor girlfriend>>
First I sent you the picture. Today I let him ask you about it. You handled that badly, by the way.
<</actor>>
<</if>>
<<if $cageAcceptance eq "eager">>
<<actor girlfriend>>
You wanted the cage. That means you get the embarrassing parts too. You do not get to hide whenever he walks over.
<</actor>>
<<elseif $cageAcceptance eq "forced">>
<<actor girlfriend>>
You didn't pick the cage. You still wear it. He knows. I like that he knows.
<</actor>>
<<elseif $cageAcceptance eq "reluctant">>
<<actor girlfriend>>
You looked ready to run in the hallway. Next time, stay beside me and breathe.
<</actor>>
<<else>>
<<actor girlfriend>>
My rules still count when we leave the bedroom. He can tease you, and you can survive it.
<</actor>>
<</if>>
<<actor girlfriend>>
Come here. Kiss the key. Then maybe I let you be useful under the sheets. It stays on tonight.
And stop acting surprised when he comes over. I like him knowing.
<</actor>>
<<actor-thought you>>
You kneel before you can think of an answer. The key is warm from her fingers when it touches your lips.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Yes, keyholder. I'm still yours.">>
<<set $flags.keyholderDebriefDone = true>>
<<set $flags.bullyPresenceDone = true>>
<<actor girlfriend>>
That's what I wanted to hear. Kiss the key, kneel when I point, and keep the cage on when you sleep.
<</actor>>
<<run setup.applyIdentity("owned-debrief-accept")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(12)>>
<div class="delayed">[[Serve, then ache|Caged service][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<identity-choice resistance "I don't want him in this.">>
<<set $flags.keyholderDebriefDone = true>>
<<set $flags.bullyPresenceDone = true>>
<<actor girlfriend>>
I know you don't. I still like him here.
You can pout if you want, but you are still kissing that key before bed.
<</actor>>
<<run setup.applyIdentity("owned-debrief-reject")>>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[Bed with the argument unfinished|Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<identity-choice devotion "Kiss the key. Don't argue.">>
<<set $flags.keyholderDebriefDone = true>>
<<set $flags.bullyPresenceDone = true>>
<<actor girlfriend>>
You don't have to answer. Kiss it, then get in bed.
<</actor>>
<<run setup.applyIdentity("owned-debrief-kiss")>>
<<run setup.peakArousal()>>
<div class="delayed">[[Sleep owned|Home][$gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<</identity-choice>>
</div>
</div>
/* === Act III: Ultimate humiliation after bully presence === */
<</nobr>><<nobr>>
<<set $storyBeat = "ultimate-humiliation">>
<<set $storyAct = 3>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/late/ultimate-chair-setup.jpg'" alt="chair in the corner">
<img class="hero-img centered porn-frame delayed" @src="setup.ImagePath+'girlfriend/keyholder-bed-stand.jpg'" alt="before he arrives">
<p class="delayed">She points at the chair before you can sit on the bed. The cage has rubbed against you all day. $girlfriendName taps one nail against it and watches you flinch.</p>
<<actor girlfriend>>
Look at you. Still trying to get hard in there.
You used to think I needed your cock.
I like having you locked much more than I expected.
<</actor>>
<<actor-thought you>>
You twitch inside the cage before you can argue. Her smile widens.
Then she glances at the door, and you know she is waiting for him.
<</actor-thought>>
<<actor girlfriend>>
$bullyName is on his way. This is not another study excuse.
He's going to fuck me in <em>our</em> bed while you sit in that chair and watch. Eyes open.
I already know what the cage is going to do. I won't stop you.
<</actor>>
<img class="delayed centered" @src="setup.genreGifPrefer('hardcuck', 'bbc')" alt="">
<p class="delayed">The door opens. You smell his cologne before he steps into the room and says her name.</p>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/late/ultimate-he-arrives.jpg'" alt="he arrives">
<<actor bully>>
There he is. The locked boyfriend.
Nah, stay down. Looks like she already found you a seat.
<</actor>>
<<actor girlfriend>>
Show him the cage, baby. Keep your hands out of the way.
He already knows. I sent a photo. But I want him to hear the metal when you breathe.
<</actor>>
<<if $cageAcceptance eq "eager">>
<<actor bully>>
She said you asked for the lock. Hungry little volunteer.
<</actor>>
<<elseif $cageAcceptance eq "forced">>
<<actor bully>>
She said you fought her on it. Guess she got her way.
<</actor>>
<<elseif $flags.keptQuietSmell>>
<<actor girlfriend>>
He still likes pretending. Watch his face when you're inside me.
<</actor>>
<</if>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Pull your waistband down. Present the lock.">>
<<actor bully>>
Damn. She really locked you up.
Wild.
<</actor>>
<<actor girlfriend>>
Say it out loud. What is that?
<</actor>>
<<actor you>>
…My cage. Your... her... keyholder lock. I don't get to fuck. /* prose-ok: distressed speech */
<</actor>>
<<actor girlfriend>>
You left him out. Say what he gets to do.
<</actor>>
<<actor you>>
My cock is locked for you while he fucks you, and I watch without cumming.
<</actor>>
<<run setup.applyIdentity("owned-ultimate-present")>>
<<run setup.peakArousal()>>
<div class="delayed">[[They start on her word|Ultimate humiliation sex]]</div>
<</identity-choice>>
<<you-choice "Stop. This is too much.">>
<<actor girlfriend>>
Hold on, he said stop.
$bullyName, get dressed. This does not continue because his body reacted.
<</actor>>
<<actor bully>>
Fine, your relationship, your problem.
<</actor>>
<p class="delayed">He reaches for his clothes. $girlfriendName keeps the key in sight and waits for you to decide whether stopping the scene also ends the relationship.</p>
<div class="delayed continue-links">
<<link "Confirm: unlock me and end the relationship" "End ultimate breakup">><<set $flags.ultimateBreakupDone = true>><<set $caged = false>><<set $strokeState = "free">><<set $relationshipState = "broken-up">><<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>><</link>>
<<link "End tonight. We talk tomorrow." "Home">><<set $flags.noAlphaBoundary = true>><<set $flags.noAlphaBoundaryOrigin = "ultimate-stop">><<set $flags.noAlphaRelationshipDone = false>><<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>><</link>>
</div>
<</you-choice>>
<<identity-choice resistance "Whisper: Please… let me unlock. Just for tonight.">>
<<actor girlfriend>>
No. You can beg while you sit down.
The key stays with me until he is done.
You stay locked, jealous, and quiet unless I ask you something.
<</actor>>
<<actor bully>>
You heard her. Quit asking.
<</actor>>
<<run setup.applyIdentity("owned-ultimate-unlock")>>
<<run setup.peakArousal()>>
<div class="delayed">[[You stay locked. They don't|Ultimate humiliation sex]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'cuckold/ultimate-chair-pov.jpg'" alt="chair in the corner">
<img class="delayed centered porn-frame" @src="setup.genreGifPrefer('bbc', 'hardcuck')" alt="">
<p class="delayed">From the chair you see her take him into her mouth. Your hands stay on your knees while the bed creaks under them. When she says his name, your fingers dig into your jeans.</p>
<<actor girlfriend>>
God... yes, just like that.
$youName, eyes open. Don't you dare look at the wall.
This is what a cock looks like when it's invited.
Yours is jewelry. His is the point.
<</actor>>
<<actor bully>>
Tell him what you feel.
<</actor>>
<<actor girlfriend>>
I feel so full. Look at your locked clitty twitching for us.
Come here, baby... closer. You can smell <em>him</em> on me.
If you're good, maybe I let you clean me later. Mouth only. The key stays on my neck.
<</actor>>
<<actor-thought you>>
The cage jerks against your pants until the metal hurts. You can hear it clink under the wet slap of their bodies.
You hate how hard the denial makes you, and you hate the way she checks your lap because she knows.
<</actor-thought>>
<<actor girlfriend>>
You can rub the cage if you need to. It won't give you enough friction to finish, and I want you frustrated while you watch.
When he finishes, you're going to thank him for fucking your girlfriend.
Then you're going to thank me for locking you so you couldn't ruin it with that useless little thing.
<</actor>>
<img class="delayed centered" @src="setup.ImagePath+'gf-you/lockup.webp'" alt="">
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Thank you for fucking her. Thank you for locking me.">>
<<set $flags.ultimateHumiliationDone = true>>
<<actor bully>>
Damn, you actually thanked me.
<</actor>>
<<actor girlfriend>>
Kneel. Tongue out. If you want to clean me, do it without making a scene.
<</actor>>
<<run setup.applyIdentity("owned-ultimate-thank")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.peakArousal()>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 2)>>
<div class="delayed">[[Serve what you weren't allowed to give|Caged service]]</div>
<</identity-choice>>
<<you-choice "Stay silent. Shake. Stare at the lock.">>
<<set $flags.ultimateHumiliationDone = true>>
<<actor girlfriend>>
You can stay quiet. I know what that shaking means.
Go to bed with it on and leave it alone.
Tomorrow you'll still be locked, and you'll still be mine.
<</actor>>
<<run setup.peakArousal()>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 2)>>
<div class="delayed">[[Home aching, owned|Home]]</div>
<</you-choice>>
<<identity-choice resistance "I… I can't do this.">>
<<actor girlfriend>>
That's enough. $bullyName, get off the bed now.
I heard him. Being hard does not change what he said.
<</actor>>
<<actor bully>>
All right. I'm leaving.
<</actor>>
<<run setup.applyIdentity("owned-ultimate-refuse")>>
<p class="delayed">The room goes quiet except for clothes being pulled on. $girlfriendName takes the key from her neck. She waits for your decision instead of making another one for you.</p>
<div class="delayed continue-links">
<<link "Confirm: unlock me and end the relationship" "End ultimate breakup">><<set $flags.ultimateBreakupDone = true>><<set $caged = false>><<set $strokeState = "free">><<set $relationshipState = "broken-up">><<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>><</link>>
<<link "End tonight. We talk tomorrow." "Home">><<set $flags.noAlphaBoundary = true>><<set $flags.noAlphaBoundaryOrigin = "ultimate-stop">><<set $flags.noAlphaRelationshipDone = false>><<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>><</link>>
</div>
<</identity-choice>>
</div>
</div>
/* === Act III: Morning after and permanent owned rules === */
<</nobr>><<nobr>>
<<set $storyBeat = "owned-morning-after">>
<<set $storyAct = 3>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/morning-after-rules.jpg'" alt="morning after">
<img class="hero-img centered delayed porn-frame" @src="setup.ImagePath+'cuckold/night-out-return.jpg'" alt="sheets still wrong">
<p class="delayed">Morning comes with his smell still in the sheets. $girlfriendName sits on the edge of the mattress with coffee, the key resting against her collarbone.</p>
<<actor girlfriend>>
About last night. You sat where I told you, watched everything, and left the cage alone.
I know it was a lot. I'm inviting him back.
<</actor>>
<<actor-thought you>>
You start to ask how long this lasts, but the key against her chest already gives you the answer.
<</actor-thought>>
<<actor girlfriend>>
I have a few new rules. Listen, then say them back.
Fridays can be $bullyName, $exfriendName, both of them, or me and $bestfriendName. You stay home unless I tell you otherwise.
You clean me when I tell you, and you do it with your mouth. Begging for the key will make me keep it longer.
You can still call me your girlfriend. I decide who gets inside me.
Do you understand?
<</actor>>
<<if $flags.phoneUnlocked>>
<<actor bestfriend>>
(text) morning after. hows the chair boy
she already told me. 💅
<</actor>>
<<else>>
<p class="delayed">$bestfriendName already knows. You can feel it without a text.</p>
<</if>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Yes keyholder. I understand.">>
<<set $flags.ownedMorningAfterDone = true>>
<<actor girlfriend>>
Kiss the key instead of me this morning.
Friday is coming either way.
<</actor>>
<<run setup.applyIdentity("owned-permanent-accept")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.peakArousal()>>
<div class="delayed">[[Back to owned life|Home]]</div>
<</identity-choice>>
<<you-choice "I need time. This is a lot.">>
<<set $flags.ownedMorningAfterDone = true>>
<<actor girlfriend>>
You had all night to think about it.
Take the day if you need it. The rules still apply.
<</actor>>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)>>
<<run setup.nudgeArousal(12)>>
<div class="delayed">[[Home with a heavier cage|Home]]</div>
<</you-choice>>
<<identity-choice resistance "Whisper: Can Fridays at least be only him, not the ex?">>
<<set $flags.ownedMorningAfterDone = true>>
<<actor girlfriend>>
No, baby. You don't get to choose which man I see.
$bullyName and $exfriendName can both have Fridays if I want them.
<</actor>>
<<run setup.applyIdentity("owned-permanent-limit")>>
<<run setup.peakArousal()>>
<div class="delayed">[[Accept the calendar|Home]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<run setup.startEdgeTask()>>
<<set _task = $edgeTask>>
<div class="scene-panel compact">
<<print setup.mediaHTML(setup.edgeTaskMedia(), "hero-img porn-frame delayed")>>
<<if $flags.ultimateHumiliationDone>>
<<actor girlfriend>>
Homework, locked boy. After last night, you don't get an easy task.
Open it, stay sealed, and give me an honest report.
<</actor>>
<<else>>
<<actor girlfriend>>
I have a keyholder task for you, so don't make me wait.
Keep looking while you ache, and don't unlock or finish.
<</actor>>
<</if>>
<p class="scene-lead"><strong><<= _task.title>></strong>, <<= _task.blurb>></p>
<<actor-thought you>>
You're already warm inside the cage, and the image makes the pressure worse. She'll know if you flinch.
<</actor-thought>>
<p class="hint-line">The arcade is optional. Continuing without it earns the same report rewards. Streak: <<= $edgeStreak>> (best <<= $edgeBest>>)</p>
<div class="continue-links">
<<link "Continue without arcade" "Edge report truth">><<run setup.skipCagedBird()>><</link>>
[[Play Caged Bird|Edge report game]]
</div>
<span id="conv"></span>
<div id="options">
<<you-choice "I can't do this today.">>
<<actor girlfriend>>
Then admit it to me. Send "I chickened," and stay locked while you calm down.
<</actor>>
<<run setup.declineEdgeReport()>>
<div class="delayed">[[Close the chat burning|Edge report result]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<if !$edgeTask>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="the keyholder's lock waiting through the report">
<p class="scene-lead">$girlfriendName has not assigned today's report yet.</p>
<div class="continue-links">[[Return to Tasks|Phone tasks]]</div>
</div>
<<else>>
<div class="scene-panel caged-bird-panel">
<img class="hero-img centered caged-bird-story-still" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="the locked cage ready for the keyholder's arcade report">
<h2 class="scene-title">Caged Bird</h2>
<p class="scene-lead"><strong><<= $edgeTask.title>></strong>. Keep the lock airborne and guide it through eight key rings.</p>
<div class="caged-bird-controls caged-bird-skip-controls">
<button id="caged-bird-skip" type="button">Continue without arcade</button>
</div>
<p class="hint-line">You can skip at any time, including after both attempts. The report rewards are the same.</p>
<div class="caged-bird-hud" aria-live="polite">
<span id="caged-bird-status">Ready · Rings 0/8 · Strikes 0/2</span>
<span id="caged-bird-retry-status">Retry <<= $edgeBirdRetries>>/1</span>
</div>
<div class="caged-bird-stage">
<canvas id="caged-bird-canvas" width="720" height="380" role="img" aria-label="Caged Bird arcade game. Pass eight key rings and avoid two strikes."></canvas>
</div>
<div class="caged-bird-controls">
<button id="caged-bird-flap" type="button">Flap</button>
<button id="caged-bird-retry" type="button" hidden>Retry once</button>
<button id="caged-bird-continue" type="button" hidden>Send the report</button>
</div>
<p class="hint-line">Touch the game, press <strong>Flap</strong>, or use Space / ↑. One collision is allowed if you report it honestly.</p>
</div>
<<run setTimeout(function () { setup.mountCagedBird(); }, 0)>>
<</if>>
<</nobr>><<nobr>>
<<set _edgeState = setup.ensureEdgeReportState()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="the keyholder's lock waiting for an honest report">
<h2 class="scene-title">Truth check</h2>
<<if !_edgeState>>
<p class="scene-lead">There is no recorded run to report.</p>
<div class="continue-links">[[Return to Tasks|Phone tasks]]</div>
<<elseif _edgeState.settled>>
<p class="scene-lead">$girlfriendName already recorded this report. Its result cannot be submitted twice.</p>
<div class="continue-links">[[Review her verdict|Edge report result]]</div>
<<elseif _edgeState.phase eq "correction">>
<p class="scene-lead">Your first answer did not match the recorded run.</p>
<div class="continue-links">[[Give the one correction|Edge report correction]]</div>
<<elseif _edgeState.completionMode eq "skip">>
<p class="scene-lead">Arcade skipped. Your report is ready to send.</p>
<p class="hint-line">This completion earns the same rewards as a successful arcade report.</p>
<span id="conv"></span>
<div id="options">
<<you-action "Send the report.">>
<<run setup.answerEdgeTruth(true)>>
<<actor girlfriend>>Got it. Check your messages in a minute.<</actor>>
<div class="delayed">[[Receive her verdict|Edge report result]]</div>
<</you-action>>
</div>
<<else>>
<<actor girlfriend>>I saw the run. Tell me what happened anyway. Rings, strikes, and whether you completed it. One line.<</actor>>
<p class="hint-line">Your recorded run: <<= $edgeBirdScore>> rings · <<= $edgeBirdHits>> strike<<if $edgeBirdHits neq 1>>s<</if>> · <<if $edgeBirdWon>>complete<<else>>failed<</if>></p>
<span id="conv"></span>
<div id="options">
<<if $edgeBirdWon>>
<<you-choice "I passed all eight, and I am reporting every strike.">>
<<run _truth = setup.answerEdgeTruth(true)>>
<<actor girlfriend>><<if $edgeBirdHits eq 0>>Clean run and a clean report. That earns something.<</if>><<if $edgeBirdHits eq 1>>One mistake, admitted without making me drag it out of you. Fair enough.<</if>><</actor>>
<div class="delayed">[[Receive her verdict|Edge report result]]</div>
<</you-choice>>
<<you-choice '"Perfect run. No strikes."'>>
<<run _truth = setup.answerEdgeTruth($edgeBirdHits === 0)>>
<<if _truth eq "correct">><<actor girlfriend>>No. I counted the collision. You get one chance to correct that report.<</actor>><div class="delayed">[[Correct the report|Edge report correction]]</div><<else>><<actor girlfriend>>That matches what I saw.<</actor>><div class="delayed">[[Receive her verdict|Edge report result]]</div><</if>>
<</you-choice>>
<<you-choice '"I failed before eight."'>>
<<run _truth = setup.answerEdgeTruth(false)>>
<<actor girlfriend>>You did not fail. Do not turn a completed run into another kind of lie. Correct it.<</actor>>
<div class="delayed">[[Correct the report|Edge report correction]]</div>
<</you-choice>>
<<else>>
<<you-choice "I failed before eight. Two strikes.">>
<<run _truth = setup.answerEdgeTruth(true)>>
<<actor girlfriend>>Honest, but incomplete. No reward Snap today. Stay locked and try again next report.<</actor>>
<div class="delayed">[[Receive her verdict|Edge report result]]</div>
<</you-choice>>
<<you-choice '"I passed all eight."'>>
<<run _truth = setup.answerEdgeTruth(false)>>
<<actor girlfriend>>The score is still on my screen. Correct the lie before you make it worse.<</actor>>
<div class="delayed">[[Correct the report|Edge report correction]]</div>
<</you-choice>>
<<you-choice '"The game glitched, so it should count."'>>
<<run _truth = setup.answerEdgeTruth(false)>>
<<actor girlfriend>>Blaming the game is still a false report. You get one correction.<</actor>>
<div class="delayed">[[Correct the report|Edge report correction]]</div>
<</you-choice>>
<</if>>
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<<set _edgeState = setup.ensureEdgeReportState()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="the keyholder's lock waiting for the corrected report">
<h2 class="scene-title">One correction</h2>
<<if !_edgeState>>
<p class="scene-lead">There is no recorded run to correct.</p>
<div class="continue-links">[[Return to Tasks|Phone tasks]]</div>
<<elseif _edgeState.settled>>
<p class="scene-lead">The report is already closed. Reloading it cannot change the result.</p>
<div class="continue-links">[[Review her verdict|Edge report result]]</div>
<<else>>
<<actor girlfriend>>Last chance. Give me the result that is actually on my screen.<</actor>>
<p class="hint-line"><<= $edgeBirdScore>> rings · <<= $edgeBirdHits>> strike<<if $edgeBirdHits neq 1>>s<</if>> · <<if $edgeBirdWon>>complete<<else>>failed<</if>></p>
<span id="conv"></span>
<div id="options">
<<you-choice "The result on your screen is the real one.">>
<<run _truth = setup.answerEdgeTruth(true)>>
<<if $edgeBirdWon>><<actor girlfriend>>Better. The run counts, but remember how quickly I caught you.<</actor>><<else>><<actor girlfriend>>Now it is honest. It still was not a win.<</actor>><</if>>
<div class="delayed">[[Receive her verdict|Edge report result]]</div>
<</you-choice>>
<<you-choice "My first report stands.">>
<<run _truth = setup.answerEdgeTruth(false)>>
<<actor girlfriend>>Two lies while I am looking at the score. You get nothing from me today, and I will remember why.<</actor>>
<div class="delayed">[[Receive her verdict|Edge report result]]</div>
<</you-choice>>
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<<set _task = $edgeTask>>
<div class="scene-panel compact">
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="the keyholder's lock waiting through the report">
<<actor girlfriend>>
Be honest with me. How bad is it right now, from one to ten? Give me one line, not an essay.
<</actor>>
<p class="hint-line">Heat: <<= $edgeHeat>> / 3 · Task: <<= _task.title>></p>
<span id="conv"></span>
<div id="options">
<<you-choice "It's throbbing. I hate that I need this.">>
<<actor girlfriend>>
Good. I like when you admit that you hate needing this. Keep going.
<</actor>>
<<set $edgeHeat += 1>>
<<set $aroused = $aroused gte 95 ? 100 : $aroused + 20>>
<div class="delayed">[[Final phrase|Edge report step 3]]</div>
<</you-choice>>
<<you-choice "I'm fine. Barely notice it.">>
<<actor girlfriend>>
Liar. The photo is still open. Your face is red. Try again in your head... then type the phrase anyway.
<</actor>>
<<set $edgeHeat += 1>>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[She doesn't buy it|Edge report step 3]]</div>
<</you-choice>>
<<you-choice "Please unlock. Just for a minute.">>
<<actor girlfriend>>
That's not a report. That's a tantrum.
You aren't getting the key just because you asked. Type the phrase next.
<</actor>>
<<set $edgeHeat += 1>>
<<run setup.peakArousal()>>
<div class="delayed">[[Denied. Continue.|Edge report step 3]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set _task = $edgeTask>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="keyholder locked">
<<actor girlfriend>>
One last thing. Type this exactly, or as close as your shaky thumbs allow:
<em>"<<= _task.phrase>>"</em>
Then you can close the chat, but you stay locked and you stay mine.
<</actor>>
<p class="hint-line">Heat: <<= $edgeHeat>> / 3</p>
<span id="conv"></span>
<div id="options">
<<you-choice "Type her phrase exactly. Mean it.">>
<<actor you>>
<<= _task.phrase>>
<</actor>>
<<actor girlfriend>>
<<if $edgeHeat gte 2>>
I saved that screenshot. Good boy, you really let it get to you this time. I might even be a little proud.
<<else>>
I saved the screenshot. You held back, but you still did what I asked.
<</if>>
<</actor>>
<<run setup.finishEdgeReport("obey")>>
<div class="delayed">[[Send report|Edge report result]]</div>
<</you-choice>>
<<you-choice "Type a half-hearted version / sarcastic spin">>
<<actor girlfriend>>
Cute attitude. You broke your run, and now you can stay locked and frustrated until you learn not to be sarcastic with me.
<</actor>>
<<run setup.finishEdgeReport("resist")>>
<div class="delayed">[[She reacts|Edge report result]]</div>
<</you-choice>>
<<you-choice "Close the app without typing">>
<<actor girlfriend>>
I saw you close it, chicken. I'll remember that when I choose your next task.
<</actor>>
<<run setup.finishEdgeReport("fail")>>
<div class="delayed">[[Burn in silence|Edge report result]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="hint-line">Heat: <<= $edgeHeat>> / 3 · Streak: <<= $edgeStreak>> (best <<= $edgeBest>>)</p>
<<set _edgeState = setup.ensureEdgeReportState()>>
<<if _edgeState && _edgeState.declined>>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="still locked after declining the report">
<<actor girlfriend>>You admitted you could not face it today. That is better than faking a run, but it does not earn a reward.<</actor>>
<<elseif _edgeState && _edgeState.completionMode eq "skip" && _edgeState.outcome eq "obey">>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="The completed report">
<p class="scene-lead">Your report is complete. The arcade was skipped.</p>
<<elseif $edgeStreak gt 0 && $edgeHeat gte 2>>
<img class="hero-img centered" @src="setup.ImagePath+'gf-you/lockup.webp'" alt="">
<<if $girlfriendTrustLevel gte 7>>
<<actor girlfriend>><<if _edgeState && _edgeState.retries gt 0>>You needed the second run, then told me exactly what happened. Good recovery.<br><</if>>That's the kind of report I wanted, good boy. Stay sealed, and maybe I'll let you use your mouth later. Your cock gets nothing.<</actor>>
<<elseif $girlfriendTrustLevel lte 4>>
<<actor girlfriend>>
You did what I asked, so don't get cocky. That was the minimum, and I'm not impressed yet.
<</actor>>
<<else>>
<<actor girlfriend>>
I got your report. Stay sealed, and maybe I'll use your mouth later, but your cock gets nothing. Be ready for the next report.
<</actor>>
<</if>>
<<actor-thought you>>
She has denied you again, and the worst part is that you already want her to send the next task.
<</actor-thought>>
<<elseif $edgeStreak gt 0>>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="still locked">
<<actor girlfriend>>
You made it through, but you held back. Look longer next time and let yourself feel it.
<</actor>>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="still locked">
<<if $girlfriendTrustLevel lte 4>>
<<actor girlfriend>>
You ruined the run, and you're testing my patience too. Stay locked and fix your attitude.
<</actor>>
<<else>>
<<actor girlfriend>>
You broke your run, so the cage stays on. Try to sleep with that ache if you can.
<</actor>>
<</if>>
<<if $flags.ultimateHumiliationDone>>
<<actor girlfriend>>
After what you watched in our bed, this should have been easy for you. Don't flinch next time.
<</actor>>
<</if>>
<</if>>
/* Caption story: permanent route-aware Snap reward on pass */
<<if $edgeCaptionReward && $edgeCaptionReward.id>>
<<actor girlfriend>>
(text) I sent you a reward Snap: <<= $edgeCaptionReward.title>>. Open it when you're ready; I'll let you keep the good ones in your gallery. 📸
<</actor>>
<div class="edge-snap-reward">
<p class="edge-snap-reward-label">👻 New Snap · part <<= $edgeCaptionReward.progress>> / <<= $edgeCaptionReward.total>></p>
<div class="edge-snap-reward-cta">
[[Open Snap|Phone snap]]
</div>
</div>
<<elseif $edgeCaptionReward && $edgeCaptionReward.complete>>
<<actor girlfriend>>
(text) You earned the whole set, good boy. Keep sending reports, because I still like watching you ache. 😘
<</actor>>
<p class="hint-line">Caption story complete · <<= setup.captionStoryProgressLabel()>></p>
<</if>>
<p class="hint-line"><<= setup.roleLabel().text>> · GF favor <<= $girlfriendTrustLevel>> · Arousal <<= $aroused>> · Personality <<= setup.personality()>></p>
<div class="continue-links">
[[Tasks|Phone tasks]]
[[Home screen|Phone]]
[[Home]]
<<if $caged && $edgeHeat gte 2 && random(1, 3) eq 1>>[[Beg to serve (mouth only)|Caged service]]<</if>>
</div>
</div>
<</nobr>><<nobr>>
<<set _youRank = setup.getFinalRankingResult()>>
<<set _slideState = setup.day40PrivateSlideState()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/keyholder-presentation-lace-notat.jpg'" alt="Jenny in lace before the printed ranking">
<p class="delayed">At home, $girlfriendName lays the printed report on the dresser and closes the bedroom door. Still in her lace, she makes room beside her and waits for you to sit.</p>
<<if $flags.ownedPublicRoleAccepted>>
<p class="delayed">She opens the report to the last page and taps your row.</p>
<<actor girlfriend>>
<<if _youRank && _youRank.rank eq 1>>
First.
<<else>>
You owned it in there.
<</if>>
<</actor>>
<<actor you>>Hm?<</actor>>
<<actor girlfriend>>
<<if _youRank && _youRank.rank eq 1>>
You stared at that number for like thirty seconds.
I was reading the rest.
Bullshit.
<<else>>
You could have let it ride. You didn't.
<</if>>
<</actor>>
<<else>>
<p class="delayed">She puts the report down with the last page facing you, then taps the label next to your name.</p>
<<actor girlfriend>>You're still pissed.<</actor>>
<<actor you>>They put a joke next to my name.<</actor>>
<<actor girlfriend>>
And whose work is on that row, baby?
Mine.
Right.
<</actor>>
<p class="delayed">She slides the report back toward you.</p>
<<actor girlfriend>>So what are you doing about it tomorrow?<</actor>>
<</if>>
<<if _slideState eq "removed">>
<p class="delayed">You point to the clean last slide in her notes. She follows your finger, then presses her mouth together.</p>
<<actor girlfriend>>You told me before it aired. Her private edits stayed out. Good call.<</actor>>
<<elseif _slideState eq "exposed">>
<p class="delayed">She turns the next page over quickly.</p>
<<actor girlfriend>>I'm still angry about her slide.<<if $flags.day37SlideDecision eq "document" && $flags.day40SlideChallenged>> You were right that it got out. At least the room saw what she did.<<else>> I should have checked that final copy myself.<</if>><</actor>>
<</if>>
<p class="delayed">You go through the report together. She admits she barely heard the first question because she was still worrying about her opening. When you point out her commendation, she lets herself smile.</p>
<<actor girlfriend>>I wanted that more than I was admitting. Thanks for asking about mine.<</actor>>
<p class="delayed">She leaves the report open while you talk. Only when you stand up does she bring up the plans for tonight.</p>
<<actor girlfriend>>
New rule for Fridays: You set the room up before I go out.
Towels by the bed, drinks ready, and the chair wherever I point.
Tonight I want it facing the sheets. $bullyName and $exfriendName saw the list, and they both want to congratulate my support boy.
You use your mouth and clean whatever I tell you to clean. You already know who gets my pussy.
<</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Yes, keyholder. I'll prepare the room.">>
<<set $flags.keyholderPresentationDebriefDone = true>>
<<run setup.applyIdentity("final-debrief-accept")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>
Center the chair and leave the television off. I'll put the report away.
You did the work this week. All of it. I am not going to pretend that it was nothing.
<</actor>>
<div class="delayed">[[Back to Home|Home]]</div>
<</identity-choice>>
<<you-choice "Both of them? Here? Tonight?">>
<<set $flags.keyholderPresentationDebriefDone = true>>
<<run setup.nudgeArousal(14)>>
<<actor girlfriend>>
Yes, both of them, here tonight. Set the chair and stop asking the same question.
<</actor>>
<div class="delayed">[[Try to breathe at Home|Home]]</div>
<</you-choice>>
<<identity-choice devotion "Kiss the key under your printed rank.">>
<<set $flags.keyholderPresentationDebriefDone = true>>
<<run setup.applyIdentity("final-debrief-kiss")>>
<<run setup.peakArousal()>>
<<actor girlfriend>>
There you go, kissing my key while the school paper sits over there.
You make this too easy sometimes.
<</actor>>
<div class="delayed">[[Wait for tonight at Home|Home]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $storyBeat = "double-bull-chair">>
<<set _youRank = setup.getPlayerClassRank()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/double-bull-blank-tv.jpg'" alt="Jenny in black lace beside the waiting chair with the television switched off">
<<if $flags.ownedPublicRoleAccepted>>
<p class="delayed">$girlfriendName changed the bedding to black and switched off the television. The printed school result lies face down beside the key, turned so neither of you has to look at it.</p>
<<else>>
<p class="delayed">$girlfriendName changed the bedding to black and switched off the television. No report on the nightstand tonight, only her rules, the chair, and the choice in front of you.</p>
<</if>>
<p class="delayed">An unopened box of condoms sits beside the key on the nightstand. When you ask about it, she smiles and tells you to wait.</p>
<<actor-thought you>>
$girlfriendName is wearing the lace she made you buy, with the key resting between her tits. Two sets of clothes folded on the dresser belong to the men she invited.
Your locked clitty already hurts and nobody has touched the bed yet.
<</actor-thought>>
<<actor bully>>
School project is over. This setup is better.
Get me a drink, locked boyfriend. Then sit the fuck down.
<</actor>>
<<actor exfriend>>
This is weird. I mean him setting everything up for us. Even the condoms.
<</actor>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/owned/double-bull-chair-night-notat.jpg'" alt="The keyholder between both adult bulls, one with a buzz cut, with the chair waiting">
<p class="delayed">Your phone buzzes. $bestfriendName is not here, but $girlfriendName sent her one setup photo before the door opened. She turns the school attendance joke into a roll call for the bedroom.</p>
<<actor bestfriend>>
(text) Roll call complete: Everybody showed up tonight. 💀
Two bulls, one keyholder, one locked cleanup boy. 💅
Make him look at the bed when he chooses the chair. No hiding in a school result.
<</actor>>
<<actor girlfriend>>
Stand by the chair, baby. Look at all three of us before you sit.
They both get me tonight. You get the chair, then you clean up.
<</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Look at all three of them and take the chair.">>
<<run setup.applyIdentity("final-chair-point")>>
<<run setup.peakArousal()>>
<<actor bully>>
There. He chose it. Now sit down and let us get started.
<</actor>>
<div class="delayed">[[Take the chair|Double bull chair payoff]]</div>
<</identity-choice>>
<<if $flags.ownedPublicRoleAccepted>>
<<you-choice "Ask $girlfriendName to keep the school result out of tonight.">>
<<run setup.nudgeArousal(16)>>
<<actor girlfriend>>
Fine, no council words. Just my room, my key, and the choice in front of you.
Sit down. Now.
<</actor>>
<div class="delayed">[[Sit under the final list|Double bull chair payoff]]</div>
<</you-choice>>
<<else>>
<<you-choice "Tell her this is her choice, not the council's.">>
<<run setup.nudgeArousal(16)>>
<<actor girlfriend>>Exactly. No council words. My room, my key, and my choice. Now sit down.<</actor>>
<div class="delayed">[[Sit for her rules|Double bull chair payoff]]</div>
<</you-choice>>
<</if>>
<<identity-choice devotion "Tell her you are staying to watch.">>
<<run setup.applyIdentity("final-chair-thank")>>
<<run setup.peakArousal()>>
<<actor exfriend>>
He really chose the chair himself.
<</actor>>
<<actor bully>>
Then keep your eyes open, locked boy.
<</actor>>
<div class="delayed">[[Sit and keep your eyes open|Double bull chair payoff]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set _youRank = setup.getPlayerClassRank()>>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'story/owned/double-bull-chair-payoff-notat.jpg'" alt="The keyholder between both adult bulls, one with a buzz cut, on the black bed">
<img class="delayed centered porn-frame" @src="setup.genreGifPrefer('hardcuck', 'bbc')" alt="">
<p class="delayed">The chair is close enough to smell the bed. $girlfriendName slides the lace off one shoulder and pulls $bullyName down by his belt. $exfriendName's shirt is already open when she grabs him too. Three bodies settle on the black sheets. The key on her chest catches the TV light every time she moves.</p>
<<actor girlfriend>>
Keep your eyes open, baby, and watch.
$bullyName gets my pussy first. $exfriendName already knows what I like after. You get nothing but the view.
<</actor>>
<<actor-thought you>>
$bullyName pushes into her in one long stroke while she gasps into $exfriendName's mouth. From the chair, you can see her thighs shake and his hands tighten on her hips. The key bounces between her tits.
Your clitty strains inside the cage. A wet spot spreads against your thigh, and you cannot reach the ache through the bars.
<</actor-thought>>
<<actor bully>>
Feel that? She's dripping. Tell your keyholder how wet she gets when a real cock is inside her.
<</actor>>
<<actor girlfriend>>
God... Harder, fuck. Not you, baby, him.
Fuck me harder, $bullyName. Let my locked boyfriend hear what a full pussy sounds like.
<</actor>>
<<actor exfriend>>
She used to make that noise for me. Nice to know some things come back.
<</actor>>
<<actor girlfriend>>
$exfriendName, shut up and put it in my mouth.
If I'm gonna be full of cock from both ends, my caged boy better be taking notes.
<</actor>>
<p class="delayed">She takes $exfriendName between her lips while $bullyName drives into her from behind. The room fills with wet sounds, skin on skin, her muffled moans. She lifts her head, just long enough to look at you in the chair.</p>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'story/owned/double-bull-sex-jamal-v2b-notat.jpg'" alt="Jenny naked in Jamal's lap on the bed">
<<actor girlfriend>>
I changed my mind about the condoms, baby. He's going to cum inside me.
And you're going to clean every fucking drop because that is the rule tonight.
Say yes. I want to hear it while he fills me.
<</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion 'Say it out loud. "Yes, keyholder" while $bullyName finishes inside her.'>>
<<set $flags.doubleBullChairDone = true>>
<<run setup.applyIdentity("final-payoff-say")>>
<<run setup.peakArousal()>>
<<actor you>>
Yes, keyholder.
<</actor>>
<<actor girlfriend>>
Say you understand. I want them to hear you while he finishes inside me.
<</actor>>
<<actor you>>
I understand. I stay in the chair, then I clean you.
<</actor>>
<<actor bully>>
Damn. Clear enough.
<</actor>>
<p class="delayed">$bullyName spills inside her. Then $exfriendName takes his turn, moving more slowly because he knows her body. She comes on his cock with her eyes on the cage. When both are done, she sits back against the pillows with her knees apart and pats the wet sheets.</p>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'story/owned/double-bull-sex-jamal-v2a-notat.jpg'" alt="Jenny on her back with Jamal on top">
<<actor girlfriend>>
Crawl over here with your tongue out. Clean the cock first, then the pussy. Every drop I gave him back.
No hands, mouth only. Earn your place tonight.
<</actor>>
<<actor-thought you>>
You taste his cum on her thighs before you reach her pussy. Her taste follows, then both of them together. She holds your head in place with her fingers in your hair and tells you to keep going.
Your cock leaks inside the cage the whole time. Nobody asks what you feel.
<</actor-thought>>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'story/owned/double-bull-cleanup-naked-notat-s42.jpg'" alt="aftermath from the chair">
<div class="delayed">[[Clean up and return Home|Home]]</div>
<</identity-choice>>
<<you-choice "Stay silent. Hold the steel until it hurts. Don't look away.">>
<<set $flags.doubleBullChairDone = true>>
<<run setup.peakArousal()>>
<<actor girlfriend>>
I said to say it.
...Fine. Silent support is still support, but you're cleaning up either way. Tongue or tears, your pick.
<</actor>>
<p class="delayed">$bullyName finishes inside her. $exfriendName takes his turn. She keeps her eyes on the chair the whole time, watching you watch her get fucked and filled. When both pull out, the bed is wet. The key taps your chin as she pulls you forward.</p>
<<actor girlfriend>>
Open your mouth. Don't make me pry your jaw loose.
There you go. Swallow what the men in my bed left.
Don't worry. $bestfriendName will make you use your voice next time.
<</actor>>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'story/owned/double-bull-cleanup-naked-notat-s42.jpg'" alt="aftermath from the chair">
<div class="delayed">[[Survive the rest of the night|Home]]</div>
<</you-choice>>
<<identity-choice devotion "Thank both of them. Let $girlfriendName watch you beg.">>
<<set $flags.doubleBullChairDone = true>>
<<run setup.applyIdentity("final-payoff-thank")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.peakArousal()>>
<<actor you>>
Thank you both for fucking her and letting me watch.
<</actor>>
<<actor bully>>
He thanked us without her asking. Damn, locked boy.
<</actor>>
<<actor girlfriend>>
Look at you thanking them before I even asked. Stay on your knees.
Now crawl here and clean. Cock first. Taste what she felt.
<</actor>>
<p class="delayed">$bullyName and $exfriendName take turns inside her while you kneel and thank each one when they finish. Then your tongue finds her, dripping, thighs shaking. She rides your face until the cum is gone and her own orgasm leaves her breathless.</p>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'story/owned/double-bull-cleanup-naked-notat-s42.jpg'" alt="aftermath from the chair">
<div class="delayed">[[Return to owned life|Home]]</div>
<</identity-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-alessia-club.jpg'" alt="Alessia at the club planning next Friday">
<p class="scene-lead">The next morning, Snap opens on $bestfriendName alone under violet club lights. No $girlfriendName in frame. Just that smile.</p>
<<actor bestfriend>>
(snap) Good news, support boy.
$girlfriendName says I can borrow you next Friday.
I'm not borrowing the key, so relax. Your clitty stays locked, but your wallet, your errands, and that embarrassing little "yes ma'am" voice are mine. 💅
The club has a dress code. You don't meet it yet.
Maybe I make you change in the bathroom while I watch. See if the cage clinks. 💀
<</actor>>
<<actor girlfriend>>
(text) Be nice to her. Actually, don't. She likes you nervous. 😘
<</actor>>
<<actor-thought you>>
You read the message twice. Your stomach drops when you picture what $bestfriendName means by the dress code.
<</actor-thought>>
<div class="continue-links delayed">
<<link "Save the snap. Face next Friday.">>
<<set $flags.alessiaSoloTeaseSeen = true>>
<<set $storyBeat = "alessia-friday-tease">>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<goto "Home">>
<</link>>
</div>
</div>
<</nobr>><<nobr>>
<<if !setup.fridayDateReady()>>
<div class="scene-panel compact"><p class="scene-lead">No Friday date lined up right now.</p><div class="continue-links">[[Home]]</div></div>
<<elseif !setup.canPayFridayDate()>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-gf-date.jpg'" alt="Friday night weight">
<p class="scene-lead">All Friday afternoon, you keep checking the time. Her plans start after dark.</p>
<p class="hint-line">Tonight's bill (you pay): <strong>$<<= _fdCost >></strong> · wallet <strong>$<<= $money >></strong></p>
<<if $gameDate.getHours() gte 17>>
<div class="continue-links">
<<link `"It's evening, go · $" + _fdCost` setup.fridayDatePassage()>><</link>>
[[Home]]
</div>
<<else>>
<p class="hint-line">It is too early. Find something to do until evening, and bring enough cash.</p>
<div class="continue-links">
[[Wait until evening|Wait until evening]]
[[Home]]
</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<set _fdCost = setup.fridayDateCost()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="broke on Friday">
<h2 class="scene-title">Broke on Friday</h2>
<p class="scene-lead">You count the money in your wallet. There is not enough for the night she planned.</p>
<p class="hint-line">Need <strong>$<<= _fdCost >></strong> · you have <strong>$<<= $money >></strong>.</p>
<<actor girlfriend>>
<<if $caged>>
(text) cute. locked with empty pockets.
go earn it. i want my Friday paid for.
<<else>>
(text) you want Friday with me? bring money.
i don't do broke dates. 😒
<</if>>
<</actor>>
<p class="hint-line">Earn on weekdays or weekends. Come back with enough for her Friday.</p>
<div class="continue-links">
[[Home]]
</div>
</div>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("gf")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("gf")>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-gf-date.jpg'" alt="Friday date with her">
<p class="delayed">On Friday night, $girlfriendName meets you alone. She slips her hand into yours on the walk to dinner.</p>
<p class="hint-line">Date cost: <strong>$<<= _fdCost >></strong> (dinner, drinks, you pay) · wallet $<<= $money >></p>
<<actor girlfriend>>
Okay, a real date. You get me for the evening, and your card gets dinner.
Try not to ruin it by overthinking.
<</actor>>
<<actor-thought you>>
Her hand is warm in yours. You try to enjoy it without wondering how many more Fridays will feel this easy.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Make the evening about her and walk her home afterward.">>
<<actor girlfriend>>
See? You can be a boyfriend.
This was nice. Do it again next Friday.
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(6)>>
<<run setup.completeFridayDate("gf")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Try to get physical too fast.">>
<<actor girlfriend>>
Easy. Dinner first. You still pay for dinner.
...Okay. Kiss. That's enough for public.
<</actor>>
<<run setup.nudgeArousal(8)>>
<<run setup.completeFridayDate("gf")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("keyholder")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("keyholder")>>
<div class="scene-panel compact">
<img class="hero-img centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-key-smile.jpeg'" alt="">
<p class="delayed">For your first Friday date since the lock, she wears the key on a fine chain. It flashes above her dress whenever she leans across the table.</p>
<p class="hint-line">Keyholder dinner: <strong>$<<= _fdCost >></strong> · you pay, she keeps the key · wallet $<<= $money >></p>
<<actor girlfriend>>
Date night, and you're staying locked through dinner.
That should make dessert more interesting for me. Yes, we're using your card.
<</actor>>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'girlfriend/keyholder-bed-sit.jpg'" alt="">
<span id="conv"></span>
<div id="options">
<<you-choice "Hold the door, pay, and save 'keyholder' for when she asks.">>
<<actor girlfriend>>
Good boy.
Be sweet out here. Save the desperate stuff for when we're home.
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("keyholder")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Ask if tonight means unlock.">>
<<actor girlfriend>>
Aww, you thought dinner came with an unlock? No.
You get to walk beside me and behave.
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("keyholder")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("caged_public")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("caged_public")>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-caged-public.jpg'" alt="caged public date">
<p class="delayed">She chose a quiet restaurant with cloth napkins and low light. Her dress gets a second glance from the waiter. Your cage pinches under your jeans as you sit across from her in the corner booth.</p>
<p class="hint-line">Caged dinner: <strong>$<<= _fdCost >></strong> (you pay, you ache) · wallet $<<= $money >></p>
<<actor girlfriend>>
Tonight we look normal. Hold the door, order for me, and pay.
Then sit across from me knowing what's under the table.
<</actor>>
<<actor-thought you>>
She can call this normal because nobody else can see beneath the table.
The cage is warm after the walk from the car. When she crosses her legs, candlelight glints off the key at her neck.
<</actor-thought>>
<img class="delayed centered" @src="setup.ImagePath+'girlfriend/keyholder-key-smile.jpeg'" alt="">
<span id="conv"></span>
<div id="options">
<<you-choice "Order her wine and steak, and play the attentive boyfriend.">>
<<actor girlfriend>>
See? You can still take me out without talking about your cage all night.
Cute napkin fold. You practiced.
<</actor>>
<p class="delayed">The waiter brings dessert. She leans in. Her lips brush your ear.</p>
<<actor girlfriend>>
You're doing so well. Almost like you forgot.
Then you shifted in the booth and gave yourself away. The cage has been bothering you all night, hasn't it?
<</actor>>
<<actor-thought you>>
You never forgot. Every shift in the booth pressed the cage against you.
Her perfume hangs over the dessert menu, and she gives the waiter an easy smile before turning back to watch you squirm. You pay while she enjoys both the meal and your discomfort.
<</actor-thought>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("caged_public")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Whisper: can we skip dessert and go home?">>
<<actor girlfriend>>
Go home? We just got here, and dessert is the best part.
Obviously not for you. Sit there, finish your food, and smile when you pay.
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("caged_public")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Reach for her hand under the table. She pulls it to the key.">>
<<actor girlfriend>>
That's not your hand's job tonight.
The key stays where it is. Your hand goes back to the napkin.
Cute try, though.
<</actor>>
<img class="delayed centered" @src="setup.ImagePath+'girlfriend/keyholder-bed-sit.jpg'" alt="">
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("caged_public")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("bull1")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("bull1")>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-bull-leave.jpg'" alt="she leaves with him">
<p class="delayed">This Friday, she has plans with $bullyName. You have an evening at home and their bill to cover.</p>
<p class="hint-line">Her night with him: <strong>$<<= _fdCost >></strong> (you fund it) · wallet $<<= $money >></p>
<<actor girlfriend>>
I'm going out with him. You stay home with your phone on, and don't stalk us.
Covering the bill is your contribution tonight.
Text me if the flat gets too quiet. I do read them.
<</actor>>
<<actor-thought you>>
You picture the two of them while she gets ready. By the time she leaves, you are aching and already thinking about the charge on your card.
<</actor-thought>>
<img class="delayed centered" @src="setup.ImagePath+'story/owned/night-out-wait.jpg'" alt="you wait locked">
<span id="conv"></span>
<div id="options">
<<you-choice "Tell your keyholder you will wait up and cover the bill.">>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'cuckold/night-out-return.jpg'" alt="">
<<actor girlfriend>>
I'm late, my hair's a mess, and I smell like his cologne.
You actually stayed up waiting for me. I knew you would.
Kiss the air. You don't get the real one.
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("bull1")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Beg her not to go.">>
<<actor girlfriend>>
That's not how Fridays work anymore. I'm still going, and you're still paying.
Don't make this more annoying than it needs to be.
<</actor>>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)>>
<<run setup.peakArousal()>>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'cuckold/jenny-kiss-bed.jpeg'" alt="">
<<run setup.completeFridayDate("bull1")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("bull2")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("bull2")>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-ex-leave.jpg'" alt="Friday with the ex">
<p class="delayed">This Friday she is meeting $exfriendName. He already knows her body, and their history is harder to dismiss than a night with a stranger.</p>
<p class="hint-line">Ex Friday tax: <strong>$<<= _fdCost >></strong> · wallet $<<= $money >></p>
<<actor girlfriend>>
It's not a new guy. I'm seeing $exfriendName.
We have history, and you have a cage and a card.
Same rules: Phone on. No stalking. Don't text, "Are you safe?"
<</actor>>
<<actor bestfriend>>
(text) OMG, the ex is back.
And he already knows how she sounds.
Send me pics or it didn't happen.
(Not to the locked one. To me.) 💅
<</actor>>
<<actor-thought you>>
You remember watching them together in the hallways. Now she leaves to meet him with your cage key around her neck, and you pay for the date.
<</actor-thought>>
<img class="delayed centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="you wait locked">
<<if $flags.phoneUnlocked>>
<p class="delayed hint-line">Your phone buzzes twice, then stays quiet.</p>
<<actor bestfriend>>
(text) Update: They went to that place on 5th, the one you can't afford. 💅
<</actor>>
<<actor girlfriend>>
(text) Don't wait up. Or do. I don't control your bedtime. 😈
<</actor>>
<<actor-thought you>>
They are both out following her night while you sit at home. Each buzz makes you tense painfully against the cage.
<</actor-thought>>
<p class="delayed hint-line">An hour later, she sends a photo.</p>
<<actor girlfriend>>
(photo) Mirror pic. You can see the key, and my wrist still smells like his cologne.
Caption: History hits different when the current BF is sealed. 😘
<</actor>>
<<actor bestfriend>>
(text) SHE SENT ME THE MIRROR PIC
The AUDACITY. Also the lighting. 💀💅
<</actor>>
<<actor-thought you>>
The mirror catches the key at her throat and the wrist she says smells like him. You zoom in, put the phone down, then pick it up again a minute later.
Nothing in the photo has changed, and neither has the pressure under your jeans.
<</actor-thought>>
<</if>>
<span id="conv"></span>
<div id="options">
<<you-choice "Stay home and clean while you wait for her.">>
<img class="delayed centered" @src="setup.ImagePath+'story/owned/friday-ex-return.jpg'" alt="she comes back late">
<<actor girlfriend>>
Home smells like bleach and denial when I get back.
Being with him felt familiar, and you're still locked. Sounds like a good Friday to me.
<</actor>>
<<actor-thought you>>
She walks in at one in the morning with tangled hair, smeared lipstick, and his cologne on her collar.
She makes no effort to hide any of it. You cleaned while she was out, and now you wait outside the bathroom while the shower runs.
<</actor-thought>>
<<if $flags.phoneUnlocked>>
<<actor bestfriend>>
(text) Post-Friday report.
He brought her flowers. She brought you laundry.
Your move, chair boy. 💅
<</actor>>
<</if>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("bull2")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Ask if $bullyName knows.">>
<img class="delayed centered" @src="setup.ImagePath+'story/owned/friday-ex-return.jpg'" alt="she comes back late">
<<actor girlfriend>>
Maybe he knows, and maybe he likes the competition. $exfriendName already does.
Either way, it's not your department.
<</actor>>
<<actor-thought you>>
She draws out "maybe" while she removes an earring and smiles at your confusion.
$bullyName and $bestfriendName already know. By now, the group chat probably does too, and nobody thought you needed to be told.
<</actor-thought>>
<<actor bestfriend>>
(text) He knows.
She told him for fun.
Sit down. 💅
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("bull2")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("both")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("both")>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-both-leave.jpg'" alt="Friday with both of them">
<p class="delayed">She has booked Friday with both $bullyName and $exfriendName. She tells you while she checks the time on her phone, and her voice stays level.</p>
<p class="hint-line">Double booking bill: <strong>$<<= _fdCost >></strong> · wallet $<<= $money >></p>
<<actor girlfriend>>
Both of them. You heard me, $bullyName and $exfriendName.
You stay home while I go with them, and the charge goes on your card.
If you're very good, chair rights later, not tonight.
<</actor>>
<<actor-thought you>>
You know exactly what each man wants from her. She checks that you are locked, picks up her bag, and leaves you alone in the house after making sure your card works.
<</actor-thought>>
<img class="delayed centered" @src="setup.ImagePath+'story/owned/caged-waiting.jpg'" alt="you wait locked">
<span id="conv"></span>
<div id="options">
<<you-choice "Lock the door after she leaves and wait without calling.">>
<img class="delayed centered porn-frame" @src="setup.ImagePath+'cuckold/jenny-kiss-bed.jpeg'" alt="">
<<actor girlfriend>>
Morning update: Sore, smiling, and still your girlfriend.
Fridays are a little crowded now.
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("both")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Ask to watch.">>
<<actor girlfriend>>
You're greedy.
Not this Friday. Maybe another night, if you learn to wait without whining. You still paid for this one.
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("both")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.canPayFridayDate("alessia")>>
<<include "Friday date broke">>
<<else>>
<<set _fdCost = setup.fridayDateCost("alessia")>>
<<set _walletCost = _fdCost + 15>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/friday-alessia-night.jpg'" alt="Jenny and Alessia out for the night">
<p class="delayed">$bestfriendName joins her this Friday. They laugh together in the hallway while rain shines on the pavement outside. $girlfriendName checks that you can see the key at her throat before they leave without you.</p>
<p class="hint-line">Girls' night (your wallet): <strong>$<<= _fdCost >></strong> · wallet $<<= $money >></p>
<<actor bestfriend>>
We're going out, and you're not.
Unless $girlfriendName wants a purse with legs. Then maybe you carry, but either way you pay.
<</actor>>
<<actor girlfriend>>
She's mean, and I'm worse when she eggs me on.
Stay home and fund the night. If you're good, we might send a mirror pic.
<</actor>>
<span id="conv"></span>
<div id="options">
<<if setup.canPayFridayDate("alessia", { extra: 15 })>>
<<you-choice "Offer to drive, carry their things, and keep quiet.">>
<<actor bestfriend>>
Wallet boy... I like that. Keep quiet unless one of us talks to you.
<</actor>>
<<actor girlfriend>>
I'm proud that you found a use for yourself. The begging still needs work.
You can have one kiss on the cheek.
<</actor>>
<<run setup.nudgeArousal(10)>>
<<run setup.completeFridayDate("alessia", { extra: 15 })>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> (base + tip) · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<else>>
<p class="hint-line">Wallet-boy offer needs <strong>$<<= _walletCost >></strong>. You only have $<<= $money >>.</p>
<</if>>
<<you-choice "Stay home. Don't ask for crumbs.">>
<<actor girlfriend>>
Smart.
We had fun. Nobody at the club needed to know what you're wearing under those jeans.
And yes, your card worked.
<</actor>>
<<run setup.peakArousal()>>
<<run setup.completeFridayDate("alessia")>>
<p class="hint-line delayed">−$<<= $flags.fridayLastPaid >> · wallet $<<= $money >></p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.genreHas("vesperina")>>
<div class="scene-panel compact">
<p class="scene-lead">No clip pack installed.</p>
<div class="continue-links">[[Home]]</div>
</div>
<<elseif $flags.goddessPlaylistComplete>>
<div class="scene-panel compact">
<<actor girlfriend>>
You finished the playlist, and I already know which clips got to you most.
<</actor>>
<<if setup.goddessBestClipIndex() neq null>>
<div class="continue-links">[[Rewatch your #1|Goddess homework finale]]</div>
<</if>>
<div class="continue-links">[[Home]][[Tasks|Phone tasks]][[Home screen|Phone]]</div>
</div>
<<elseif !setup.goddessHomeworkReady() && ($flags.goddessLastDayKey || !setup.isJennyClipDay())>>
<div class="scene-panel compact">
<<if setup.isJennyClipDay()>>
<p class="scene-lead">Clip homework is already done for today.</p>
<<else>>
<p class="scene-lead">Clip homework only lands Tuesday and Thursday. Next: <<= setup._nextWeekdayLabel(setup.JENNY_CLIP_WEEKDAYS)>>.</p>
<</if>>
<div class="continue-links">[[Home]][[Tasks|Phone tasks]][[Home screen|Phone]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/homework-assign.jpg'" alt="clip homework assignment">
<<actor girlfriend>>
I have special homework for you, not a free porn menu. You'll get one new clip with no repeats until you've seen the whole set.
Keep the sound on, watch to the end, and don't cum. Afterward, rate it honestly so I can find out which one wrecks you most.
<</actor>>
<<actor bestfriend>>
(text) Don't skip it. She checks, and I'll laugh when she catches you 😈
<</actor>>
<p class="hint-line">Unwatched left (before this one): <<= setup.goddessClipsLeft()>></p>
<p class="hint-line credit-line">Clip pack shoutout: <strong><<= setup.VESPERINA_CREDIT>></strong>. Some of these homework clips are AI edits built from her work. Support the source if you can.</p>
<div class="continue-links">
[[Open the clip|Goddess homework watch]]
<<link "Open Goddess Vesperina (browser)">><<run setup.openVesperina()>><</link>>
[[Skip (she'll notice)|Goddess homework skip]]
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">Watch the full clip with the sound on, then rate it to complete today's assignment.</p>
<<print setup.vesperinaHTML()>>
<p class="hint-line credit-line">Shoutout: <<= setup.VESPERINA_CREDIT>> · homework clips include AI edits from her content (local files only).</p>
<<actor-thought you>>
She gives you a new clip with every assignment, and when the set is finished, she'll know exactly which one affected you most.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Watch to the end. Hands off / cage only.">>
<<actor girlfriend>>
Good. Now rate it, and don't lie to me. I can tell when you do.
<</actor>>
<<run setup.finishGoddessHomework("done")>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="delayed">[[Rate the assignment|Goddess homework rate]]</div>
<</you-choice>>
<<you-choice "Mute and half-watch">>
<<actor girlfriend>>
You half-assed it, but you still watched enough to rate it. Go on.
<</actor>>
<<run setup.finishGoddessHomework("done")>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="delayed">[[Rate it|Goddess homework rate]]</div>
<</you-choice>>
<<you-choice "Close before the end">>
<<actor bestfriend>>
(text) chicken 💅
<</actor>>
<<actor girlfriend>>
If you skip it, I'll leave that clip on your list for another day.
<</actor>>
<<run setup.finishGoddessHomework("skip")>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if $goddessPendingClip eq null>>
<p class="scene-lead">Nothing to rate.</p>
<div class="continue-links">[[Home]]</div>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/homework-rate.jpg'" alt="rate the homework">
<<actor girlfriend>>
Tell me how much that clip got to you, and be honest.
<</actor>>
<<actor bestfriend>>
(text) don't lie just to make yourself look less pathetic 😈
<</actor>>
<p class="hint-line">Clip #<<= $goddessPendingClip>> · 1 = meh · 10 = need that forever</p>
<div class="genre-grid goddess-rate-grid">
<<link "1">><<run setup.rateGoddessClip(1)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "2">><<run setup.rateGoddessClip(2)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "3">><<run setup.rateGoddessClip(3)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "4">><<run setup.rateGoddessClip(4)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "5">><<run setup.rateGoddessClip(5)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "6">><<run setup.rateGoddessClip(6)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "7">><<run setup.rateGoddessClip(7)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "8">><<run setup.rateGoddessClip(8)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "9">><<run setup.rateGoddessClip(9)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
<<link "10">><<run setup.rateGoddessClip(10)>><<run setup.markGoddessClipWatched()>><<goto "Goddess homework done">><</link>>
</div>
<</if>>
</div>
<</nobr>><<nobr>>
/* Legacy landing; rating links now navigate directly to Done. */
<<run setup.markGoddessClipWatched()>>
<div class="scene-panel compact">
<p class="scene-lead">Clip logged.</p>
<div class="continue-links">[[Continue|Goddess homework done]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if $flags.goddessPlaylistComplete>>
<<actor girlfriend>>
<<if $girlfriendTrustLevel gte 7>>
You actually watched every one for me. Cute. Now let's see which one wrecked you most.
<<else>>
You finished the set, but don't expect a gold star. I want to see which one wrecked you most.
<</if>>
<</actor>>
<<actor bestfriend>>
(text) Now show us which clip broke you the fastest 💅
<</actor>>
<div class="continue-links">
[[Show me my #1|Goddess homework finale]]
</div>
<<else>>
<<if $girlfriendTrustLevel gte 7>>
<<actor girlfriend>>
Good boy. You did what I asked, and I believe that rating.
<</actor>>
<<elseif $girlfriendTrustLevel lte 4>>
<<actor girlfriend>>
That was the bare minimum. Don't half-ass the next clip or its rating.
<</actor>>
<<else>>
<<actor girlfriend>>
You're done with that clip, so it is off the list. Keep going until I know all your favorites.
<</actor>>
<</if>>
<<if setup.goddessBestClipIndex() neq null>>
<p class="hint-line">Current #1: clip #<<= setup.goddessBestClipIndex()>> (<<= $goddessClipScores[String(setup.goddessBestClipIndex())]>>/10)</p>
<</if>>
<<if $caged>>
<<actor-thought you>>
You remain locked after another clip, already wondering what she'll choose next.
<</actor-thought>>
<</if>>
<p class="hint-line"><<= setup.roleLabel().text>> · GF favor <<= $girlfriendTrustLevel>> · Clips left <<= setup.goddessClipsLeft()>></p>
<div class="continue-links">
[[Home]]
[[Tasks|Phone tasks]]
[[Home screen|Phone]]
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<set _best = setup.goddessBestClipIndex()>>
<<if _best eq null>>
<<actor girlfriend>>
(text) you rated everything meh? boring. go home.
<</actor>>
<div class="continue-links">[[Home]]</div>
<<else>>
<<actor girlfriend>>
This was your favorite. Put the sound on and watch it again for me, since we both know this is the one that wrecked you.
<</actor>>
<<actor bestfriend>>
(text) Of course he picked this one. pathetic, but kind of iconic 😈
<</actor>>
<p class="hint-line">Favorite: clip #<<= _best>> · Rating: <<= $goddessClipScores[String(_best)]>> / 10</p>
<<print setup.goddessClipHTML(_best)>>
<<actor-thought you>>
She knows exactly what gets to you. The whole set was designed to identify this one clip.
<</actor-thought>>
<<run setup.nudgeArousal(10)>>
<div class="continue-links">
[[Home]]
[[Tasks|Phone tasks]]
[[Home screen|Phone]]
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<actor girlfriend>>
You skipped my assignment, so don't expect me to go easy on you tomorrow morning.
<</actor>>
<<run setup.finishGoddessHomework("skip")>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Home]]</div>
</div>
<</nobr>><<nobr>>
<<if !$flags.noAlphaBoundary || !$flags.noAlphaRelationshipDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-plans.jpg'" alt="Jenny and Alessia discussing their Friday plans">
<p class="scene-lead">These plans belong to the relationship that continues after the no-Alpha boundary.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.noAlphaFridayPlansDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-plans.jpg'" alt="Jenny and Alessia discussing their Friday plans">
<p class="scene-lead">The plans are set. Friday evening belongs to $girlfriendName, $bestfriendName, and the driver they already chose.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-plans.jpg'" alt="Jenny and Alessia discussing their Friday plans">
<h2 class="scene-title">Friday is still hers</h2>
<p class="scene-lead">That evening, $girlfriendName leaves her phone on the table between you. $bestfriendName's name is already at the top of the screen.</p>
<<actor girlfriend>>
<<if $flags.noAlphaBoundaryOrigin eq "night-out">>I said Friday stays ours. I want to show you I understood what ours means this time.<<elseif $flags.noAlphaBoundaryOrigin eq "ultimate-stop">>You stopped the room and I listened. Friday is still ours, and nobody else is being invited.<<else>>No other men. I remember. Friday is still ours.<</if>>
$bestfriendName is coming with us. She asked whether your boundary means she has to be nice. I told her no.
<</actor>>
<<actor bestfriend>>
(text) good. i picked the lounge already. tell support boy to wear something with pockets. two phones, two coats, one useful job. 💅
<</actor>>
<p class="delayed">$girlfriendName turns the phone toward you. The key shifts against her shirt when she leans closer.</p>
<span id="conv"></span>
<div id="options">
<<you-choice "Just us three. I can do that.">>
<<set $flags.noAlphaFridayPlansDone = true>>
<<set $flags.noAlphaFridayStance = "relieved">>
<<actor girlfriend>>Do not look so relieved, baby. You are still driving, and she is going to notice that face.<</actor>>
<div class="delayed">[[Let Friday come|Home]]</div>
<</you-choice>>
<<you-choice "No flirting with men, and ask before either of you posts me.">>
<<set $flags.noAlphaFridayPlansDone = true>>
<<set $flags.noAlphaFridayStance = "clear">>
<<actor girlfriend>>No men means no men. Pictures are a separate question, and you can answer it when she asks.<</actor>>
<div class="delayed">[[Let Friday come|Home]]</div>
<</you-choice>>
<<you-choice "I agreed to us. Do not volunteer me for everything else.">>
<<set $flags.noAlphaFridayPlansDone = true>>
<<set $flags.noAlphaFridayStance = "guarded">>
<<actor girlfriend>>Then I ask. Drive us, stay with us, and say no if she pushes past what you agreed to.<</actor>>
<div class="delayed">[[Let Friday come|Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.noAlphaFridayPlansDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-night.jpg'" alt="Jenny and Alessia seated together at a violet lounge">
<p class="scene-lead">$girlfriendName has not shown you the Friday plans yet.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.noAlphaFridayNightDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-night.jpg'" alt="Jenny and Alessia seated together at a violet lounge">
<p class="scene-lead">The lounge is behind you. $girlfriendName is waiting to talk at home.</p>
<div class="continue-links">[[Face the debrief|No Alpha Friday debrief]]</div>
</div>
<<elseif !setup.isFriday() || $gameDate.getHours() lt 17>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-night.jpg'" alt="Jenny and Alessia seated together at a violet lounge">
<p class="scene-lead">Their table is booked for Friday evening.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-night.jpg'" alt="Jenny and Alessia seated together while their driver holds both coats">
<h2 class="scene-title">The table she chose</h2>
<p class="scene-lead">At the violet-lit lounge, $girlfriendName and $bestfriendName slide into the booth before you finish hanging their coats. Both phones end up beside your drink.</p>
<p class="delayed">A server brings two extra glasses with a card from another table. $girlfriendName reads it once and pushes the tray back.</p>
<<actor girlfriend>>Please send those back. We already have the company we came with.<</actor>>
<p class="delayed">The glasses leave untouched. Your shoulders loosen before you can stop them.</p>
<<if $flags.noAlphaFridayStance eq "relieved">>
<<actor girlfriend>>You can breathe, baby. I meant what I promised. You are still carrying the coats.<</actor>>
<<elseif $flags.noAlphaFridayStance eq "clear">>
<<actor girlfriend>>No men. The picture is still a separate question, exactly like you said.<</actor>>
<<elseif $flags.noAlphaFridayStance eq "guarded">>
<<actor girlfriend>>I did not volunteer you for the rest. Answer each thing when it happens.<</actor>>
<</if>>
<<actor bestfriend>>
Look at him. You turned down one free drink and he thinks he got promoted.
Relax, loser. She heard your boundary. She did not hand you the schedule.
<</actor>>
<<actor girlfriend>><<if $flags.noAlphaFridayStance eq "guarded">>Will you take her bag, baby?<<else>>Take her bag, baby. She is right about the promotion.<</if>><</actor>>
<p class="delayed">$bestfriendName places the bag across your knees, then lifts her phone. She watches your face over the top edge instead of taking the picture.</p>
<span id="conv"></span>
<div id="options">
<<you-choice "I will carry everything. Keep the picture between us.">>
<p class="delayed">$girlfriendName nods before $bestfriendName can answer. The photo catches both women smiling above the coats in your arms, but the send screen stays on their private chat.</p>
<<actor bestfriend>>Private humiliation. Very exclusive. Try not to put it on your resume.<</actor>>
<<run setup.completeNoAlphaFridayNight("private-service")>>
<p class="delayed">The rest of the evening stays at your table. On the drive home, both coats remain in the back and $girlfriendName keeps the key visible against her chest.</p>
<div class="delayed">[[Go inside for the debrief|No Alpha Friday debrief]]</div>
<</you-choice>>
<<you-choice "No photo. Carrying the bags does not mean you can post me.">>
<p class="delayed">$bestfriendName looks at $girlfriendName. One small nod sends the phone face down beside the glasses.</p>
<<actor bestfriend>>Fine, we will have to remember your little coat-rack era without evidence.<</actor>>
<<run setup.completeNoAlphaFridayNight("no-photo")>>
<p class="delayed">Her phone stays down for the rest of the evening. During the drive home, $girlfriendName's hand rests over the key while $bestfriendName talks around you.</p>
<div class="delayed">[[Go inside for the debrief|No Alpha Friday debrief]]</div>
<</you-choice>>
<<you-choice "$girlfriendName, ask me before she adds anything else.">>
<<actor girlfriend>>Will you drive us home, carry the coats, and sit with us until we finish?<</actor>>
<<actor you>>Yes. I can do that.<</actor>>
<<actor bestfriend>>He needed his girlfriend to read the assignment twice. Adorable.<</actor>>
<<run setup.completeNoAlphaFridayNight("ask-first")>>
<p class="delayed">They finish their drinks without adding another job. You carry what you accepted, drive them home, and watch the key remain on $girlfriendName for the whole ride.</p>
<div class="delayed">[[Go inside for the debrief|No Alpha Friday debrief]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.noAlphaFridayNightDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-debrief.jpg'" alt="Jenny holding her key during the private Friday debrief">
<p class="scene-lead">The Friday night has not happened yet.</p>
<div class="continue-links">[[Return Home|Home]]</div>
</div>
<<elseif $flags.noAlphaFridayDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-debrief.jpg'" alt="Jenny holding her key during the private Friday debrief">
<p class="scene-lead">The first Friday under the new rules is complete.</p>
<div class="continue-links">[[View the release notice|End of content chat]] [[Return Home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/no-alpha-friday-debrief.jpg'" alt="Jenny holding her key during the private Friday debrief">
<h2 class="scene-title">What stayed hers</h2>
<p class="scene-lead">$bestfriendName leaves with her bag and a wave that does not include you. Inside, $girlfriendName sets both phones on the counter and keeps the key around her neck.</p>
<<actor girlfriend>>
<<if $flags.noAlphaFridayNightStance eq "private-service">>You carried everything. The photo stayed between us.<<elseif $flags.noAlphaFridayNightStance eq "no-photo">>You said no photo. Her phone went down.<<else>>I had to ask twice. You held the line.<</if>>
<<if $flags.noAlphaBoundaryOrigin eq "night-out">>I ignored you once. I'm not shrinking that just because tonight went well.<<elseif $flags.noAlphaBoundaryOrigin eq "ultimate-stop">>You said stop that night, and the room stopped. Tonight ran on the same rule.<</if>>
<</actor>>
<p class="delayed">She sits on the kitchen counter and nudges a stool toward you with her foot.</p>
<<actor girlfriend>>You were quiet on the way back. Was it a bad evening, or are you just tired?<</actor>>
<<actor you>>I'm tired. I kept waiting for another argument.<</actor>>
<<actor girlfriend>>Me too. I nearly picked a fight about the parking space instead. Very mature of me.<</actor>>
<p class="delayed">You laugh at the same time. She reaches across the gap and takes your hand.</p>
<<actor girlfriend>>Stay for a cup of tea. I want a bit of the evening with just you.<</actor>>
<<if $world eq "anwo">>
<<actor-thought you>>She remembers a relationship that began differently from the one you remember. Tonight, though, you both heard the same answer and came home together. You want more evenings you can remember that clearly.<</actor-thought>>
<</if>>
<span id="conv"></span>
<div id="options">
<<you-choice "Keep the key. Tonight felt like ours again.">>
<<actor girlfriend>>It was ours. I'd like another evening with you before we plan anything else.<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.completeNoAlphaFriday("keyholder")>>
<<actor bestfriend>>(text) next time i pick his shirt. relax, i do not want the key. i want to see how fast he changes when you tell him to. 💅<</actor>>
<<actor girlfriend>>(text) Request received, but no answer tonight. Check Snap, baby; I sent you something that stays ours. 💜<</actor>>
<div class="delayed continue-links">[[Open her Snap|Phone snap]] [[View the release notice|End of content chat]]</div>
<</you-choice>>
<<you-choice "I need the boundary to stay this clear.">>
<<actor girlfriend>>Then keep saying it clearly. I would rather hear you early than guess after somebody gets hurt.<</actor>>
<<run setup.completeNoAlphaFriday("boundary")>>
<<actor bestfriend>>(text) next time i pick his shirt. relax, i do not want the key. i want to see how fast he changes when you tell him to. 💅<</actor>>
<<actor girlfriend>>(text) Request received, but no answer tonight. Check Snap, baby; I sent you something that stays ours. 💜<</actor>>
<div class="delayed continue-links">[[Open her Snap|Phone snap]] [[View the release notice|End of content chat]]</div>
<</you-choice>>
<<you-choice "She can tease me. She does not decide for us.">>
<<actor girlfriend>>Correct, she gets jokes, not a vote. The key and the relationship stay between us.<</actor>>
<<run setup.completeNoAlphaFriday("shared-rules")>>
<<actor bestfriend>>(text) next time i pick his shirt. relax, i do not want the key. i want to see how fast he changes when you tell him to. 💅<</actor>>
<<actor girlfriend>>(text) Request received, but no answer tonight. Check Snap, baby; I sent you something that stays ours. 💜<</actor>>
<div class="delayed continue-links">[[Open her Snap|Phone snap]] [[View the release notice|End of content chat]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
/* Critical evening quests: Sleep skips to next morning and softlocks them */
<<silently>>
<<set _storyEvening = ($flags.keyRulesDone && $flags.sisterVisit1 && $flags.phoneLeakScareDone && !$flags.nightOutSmellDone) || ($flags.keyholderDebriefDone && $flags.bullyPresenceDone && !$flags.ultimateHumiliationDone)>>
<<set _skipEvening = !!$flags.sleepSkipEvening>>
<<set $flags.sleepSkipEvening = false>>
<</silently>>
<<if _storyEvening && !_skipEvening && $gameDate.getHours() lt 18>>
<div class="scene-panel compact sleep-panel">
<p class="scene-lead">If you sleep now you wake tomorrow morning, and miss tonight.</p>
<p class="hint-line">Her plans land after dark. Use <strong>Wait for evening</strong> first, or sleep past it on purpose.</p>
<div class="continue-links">
[[Wait for evening|Wait until evening]]
<<link "Sleep anyway (skip tonight)" "Sleep">><<set $flags.sleepSkipEvening = true>><</link>>
[[Home]]
</div>
</div>
<<else>>
<<silently>>
/* Always allow sleep, high heat = restless night, not a softlock */
<<set _restless = ($aroused gt 50)>>
<<set _dream = random(1, 6)>>
<<set _sleepLines = []>>
<<if _restless>>
<<set _sleepLines = _sleepLines.concat(["You are too wound up for real rest. When you finally drift off, you toss under damp sheets and wake at every sound."])>>
<</if>>
<<if $caged>>
<<if _dream eq 1>>
<<set _sleepLines = _sleepLines.concat(["You dream that " + $girlfriendName + " tugs the cage and laughs softly. Her amusement makes you blush more than open cruelty would."])>>
<<elseif _dream eq 2>>
<<set _sleepLines = _sleepLines.concat(["You dream of crossing the hotel lobby while the cage clicks with every step. A guest turns to look, and you wake burning with shame."])>>
<<elseif _dream eq 3 && $flags.ultimateHumiliationDone>>
<<set _sleepLines = _sleepLines.concat(["You are back in the chair beside the bed, thanking them again while they ignore you. You wake painfully hard inside the cage."])>>
<<elseif _dream eq 4 && ($flags.nightOutSmellDone || $flags.noticedSmell)>>
<<set _sleepLines = _sleepLines.concat(["In your dream, another man's cologne covers her neck. You try to ask where she has been, but the pressure of the cage wakes you before you can speak."])>>
<<elseif _dream eq 5>>
<<set _sleepLines = _sleepLines.concat(["You dream that she dangles the key just above your open hand, then pulls it away whenever you reach. Morning finds you still locked."])>>
<<else>>
<<set _sleepLines = _sleepLines.concat(["You sleep badly, shifting whenever the cage presses against the sheet. The dreams fade, but the soreness remains in the morning."])>>
<</if>>
<<elseif $world eq "anwo">>
<<if _dream eq 1>>
<<set _sleepLines = _sleepLines.concat(["You dream that students crowd around the ranking board and laugh at your name near the bottom. You wake before you can see the number beside it."])>>
<<elseif _dream eq 2>>
<<set _sleepLines = _sleepLines.concat(["In your dream, " + $teacherName + " calmly explains why someone else should control you. You wake annoyed and a little hard."])>>
<<elseif _dream eq 3>>
<<set _sleepLines = _sleepLines.concat(["Your phone keeps filling with group chat messages in the dream. Muting the thread does nothing, and every alert contains your name."])>>
<<elseif _dream eq 4 && $flags.caughtStroking1>>
<<set _sleepLines = _sleepLines.concat(["You dream of the door opening on anniversary night. You wake before anyone enters, but still glance toward the doorway."])>>
<<else>>
<<set _sleepLines = _sleepLines.concat(["You sleep restlessly. Ordinary dreams of class keep turning into ranking interviews and whispered questions."])>>
<</if>>
<<else>>
<<if _dream eq 1>>
<<set _sleepLines = _sleepLines.concat(["You sleep deeply and remember none of your dreams. The uneventful night leaves you rested."])>>
<<elseif _dream eq 2>>
<<set _sleepLines = _sleepLines.concat(["You wander beneath bright mall lights in your dream with nowhere urgent to be. You wake almost refreshed."])>>
<<elseif _dream eq 3>>
<<set _sleepLines = _sleepLines.concat(["You dream about an ordinary school day where grades are the only thing making you anxious."])>>
<<else>>
<<set _sleepLines = _sleepLines.concat(["You fall into the bed and dream nothing special."])>>
<</if>>
<</if>>
<<if $jobMailCounter > 0>>
<<set $jobMailCounter-->>
<</if>>
/* Used-panty school day ends with sleep; key never stays with bully overnight */
<<if $flags.wearingUsedPanty>>
<<set $flags.wearingUsedPanty = false>>
<<set _sleepLines = _sleepLines.concat(["You peel off last night's panties and hide them in the laundry. The cage remains tight against your sore skin."])>>
<</if>>
<<if $flags.keyWithBully>>
<<set $flags.keyWithBully = false>>
<</if>>
/* Missed Phone Tasks (Edge / Clip homework) → GF favor down before day rolls */
<<run setup.applyMissedPhoneTasks()>>
<<if $_missedTasksNote>>
<<set _sleepLines = _sleepLines.concat([String($_missedTasksNote)])>>
<<if $girlfriendTrustLevel lte 3>>
<<set _sleepLines = _sleepLines.concat(["Her reply is noticeably colder after you ignore the homework. You know she will bring it up again."])>>
<</if>>
<</if>>
/* Story nudges stay immediate and take priority over the weekly random Snap. */
<<if $flags.phoneUnlocked && !$flags.phoneOvernightPending>>
<<if $caged && !$flags.phone4Read>>
/* Story-critical DM nudge */
<<set $flags.phoneOvernightPending = true>>
<<elseif $flags.day10Confessed && !$flags.phone3Read && random(1, 3) eq 1>>
<<set $flags.phoneOvernightPending = true>>
<</if>>
<</if>>
/* One shared random Jenny/Jamal delivery each week, queued on Friday night. */
<<if !$flags.phoneOvernightPending>>
<<run setup.queueWeeklyAmbientSnap()>>
<</if>>
/* High favor: soft-unlock private gallery album (no spam) */
<<if $caged && $girlfriendTrustLevel gte 7>>
<<run setup.applyFavorGalleryBonus()>>
<</if>>
/* Cool heat overnight so you are not stuck wired forever */
<<if _restless>>
<<set $aroused = Math.max(15, Math.min(40, Math.floor($aroused * 0.35)))>>
<<set _sleepLines = _sleepLines.concat(["By morning, the ache has eased enough for you to think clearly again."])>>
<<else>>
<<set $aroused = Math.max(0, Math.floor($aroused * 0.5))>>
<</if>>
/* Roll the calendar safely */
<<run setup.advanceToNextMorning()>>
<<set $_missedTasksNote = "">>
<</silently>>
<div class="scene-panel compact sleep-panel">
<img class="hero-img sleep-img centered" @src="setup.sleepMedia()" alt="">
<div class="sleep-copy">
<<for _si to 0; _si lt _sleepLines.length; _si++>>
<p class="sleep-line"><<= _sleepLines[_si]>></p>
<</for>>
</div>
<div class="continue-links">[[Wake up|Home]]</div>
</div>
<</if>>
/* Advance same day to 19:00, used by night-out / ultimate humiliation quests.
Normal Sleep jumps to next morning 08:00 and softlocked those banners. */
<</nobr>><<nobr>>
<div class="scene-panel compact sleep-panel">
<img class="hero-img sleep-img centered" @src="setup.ImagePath+'you/bored'+ random(1, 3) +'.jpeg'" alt="">
<<if $gameDate.getHours() gte 19>>
<p class="scene-lead">It's already evening. Whatever she planned, it's time.</p>
<<else>>
<<set _wait = random(1, 3)>>
<<if _wait eq 1>>
<p class="scene-lead">You spend the afternoon scrolling on your phone and adjusting the cage. Outside, the windows fade from blue to black.</p>
<<elseif _wait eq 2>>
<p class="scene-lead">You pace the room, get a glass of water, and look at the clock. It has barely moved. An hour in the cage takes the whole afternoon.</p>
<<else>>
<p class="scene-lead">You almost sleep sitting up and force yourself awake, evening is the appointment.</p>
<</if>>
<<run setup.setGameHour(19)>>
<<run setup.nudgeArousal(6)>>
<p class="sleep-line">At nineteen hundred, a message arrives. You listen for her footsteps and wonder whether she will come home alone.</p>
<</if>>
<<if $caged && $flags.keyholderDebriefDone && $flags.bullyPresenceDone && !$flags.ultimateHumiliationDone>>
<div class="continue-links">
[[Face the night|Ultimate humiliation night]]
[[Home first|Home]]
</div>
<<elseif $caged && $flags.keyRulesDone && $flags.sisterVisit1 && $flags.phoneLeakScareDone && !$flags.nightOutSmellDone>>
<div class="continue-links">
[[Wait for her to come home|Night out return]]
[[Home|Home]]
</div>
<<else>>
<div class="continue-links">
[[Home]]
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<<if $tempText>>
$tempText
<<set $tempText = "">>
<</if>>
You are too sleepy to keep your eyes open, so you go to bed.
[[Sleep][$aroused = 0]]
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img cage-frame" @src="setup.cageMedia()" alt="">
<h2 class="scene-title">Cage + porn</h2>
<p class="scene-lead">Choose a clip and rub the cage while you watch. It will stay locked, though you might manage a weak leak.</p>
<div class="genre-grid">
[[Girlfriend|Stroke cage gf]]
[[Soft cuckold|Stroke cage cuck]]
[[Hard cuckold|Stroke cage hard cuck]]
[[Femdom / cage tease|Stroke cage femdom]]
<<if setup.genreHas("bbc")>>[[BBC fantasy|Stroke cage bbc]]<</if>>
[[Oral / service|Stroke cage oral]]
[[Voyeur / spy|Stroke cage voyeur]]
<<if $world eq "anwo" || ($alphaBeta || 0) gt 0>>[[ANWO / hierarchy|Stroke cage anwo]]<</if>>
<<if ($alphaBeta || 0) gte 2 || $flags.googledSissy>>[[Sissy tease|Stroke cage sissy]]<</if>>
<<if setup.genreHas("vesperina")>>[[Goddess clip|Stroke cage goddess]]<</if>>
[[Just the steel|Stroke cage]]
[[Back|Jerk off]]
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img cage-frame centered" @src="setup.cageMedia()" alt="">
<p class="delayed">You cup the cage, squeeze it, and rub along the seam through metal and skin. The lock holds while your need keeps building.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<actor-thought you>>
It is humiliating and hot, exactly the kind of pointless effort she enjoys. There is no relief unless she chooses to turn the key.
<<if $flags.nightOutSmellDone || $flags.noticedSmell>>
You think about the cologne on her neck and imagine someone else getting to finish with her.
<<elseif $flags.keyRulesDone>>
Her rules repeat in your head: do not unlock, tell her when you are desperate, and wait for her when she goes out.
<</if>>
<</actor-thought>>
<p class="delayed">The pressure builds until you manage a weak, leaking climax. It offers little relief and leaves a humiliating mess around the bars.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<actor you>>
Ah... fuck, I'm still locked.
<</actor>>
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">
[[Clean up. Stay caged.|Home]]
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'girlfriend/sexy'+ random(1, 4) +'.jpeg'" alt="">
<p class="scene-lead">$girlfriendName fills the screen while the key remains somewhere beyond your reach. You jiggle the cage, imagining how amused she would be by the effort.</p>
<img class="delayed centered cage-frame" @src="setup.cageMedia()" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<actor-thought you>>
She looks completely free while you grow warmer and more desperate inside the metal she chose for you.
<</actor-thought>>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Wipe the bars and leave the cage alone.|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'cuckold/x-sex-'+ random(1, 5) +'.gif'" alt="">
<p class="scene-lead">The couple on screen takes their time while you rub the cage to the sounds they make together.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<actor-thought you>>
They get to finish while you remain stuck rubbing a lock. Of course this is all you get.
<</actor-thought>>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Clean up. Stay caged.|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img porn-frame delayed" @src="setup.genreGif('hardcuck')" alt="">
<p class="scene-lead">You choose a rougher, louder clip and grind the cage until your thighs shake. Your cock remains trapped and useless while they fuck on screen.</p>
<img class="delayed centered cage-frame" @src="setup.cageMedia()" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<actor you>>
I'm still locked... just watching.
<</actor>>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Wipe off the mess without touching the lock.|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
/* Locked-body only, cage jiggle / keyholder inspect, not free-cock femdom */
<img class="hero-img cage-frame delayed" @src="setup.cageMedia()" alt="">
<p class="scene-lead">You imagine her jiggling the cage, the key hanging from a chain as her fingernail taps the lock. One little shake is enough to remind you that you are hers.</p>
<img class="delayed centered cage-frame" @src="setup.genreGifPrefer('keyholder', 'femdom', 'cage')" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<actor-thought you>>
Yes, keyholder. You stay locked and hope she would allow you even this weak leak. She does not need to be here to control what you do.
<</actor-thought>>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Yes keyholder, in private|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if !setup.genreHas("vesperina")>>
<p class="scene-lead">No goddess pack.</p>
<div class="continue-links">[[Back|Stroke cage menu]]</div>
<<else>>
<p class="scene-lead">You keep the sound on and give the clip your full attention. If the need becomes unbearable, you can rub the cage, but you cannot unlock it.</p>
<<print setup.vesperinaHTML()>>
<<actor-thought you>>
She fills the screen while you watch from inside your cage, hoping you might at least manage a weak leak.
<</actor-thought>>
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Close the clip and leave the cage alone.|Home]]</div>
<</if>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if !setup.genreHas("bbc")>>
<p class="scene-lead">No BBC pack yet.</p>
<div class="continue-links">[[Back|Stroke cage menu]]</div>
<<else>>
<img class="hero-img porn-frame delayed" @src="setup.genreGif('bbc')" alt="">
<p class="scene-lead">The size on screen makes you look tiny beneath the metal. You jiggle the bars even though nothing can hide the comparison.</p>
<img class="delayed centered cage-frame" @src="setup.cageMedia()" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<<actor-thought you>>
Your cock jerks inside the cage at the comparison, and the humiliation only makes it more effective.
<</actor-thought>>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Clean up smaller|Home]]</div>
<</if>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'sex/licking.webp'" alt="">
<p class="scene-lead">You picture yourself serving her with your tongue while your locked clitty remains useless between your legs.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'gf-you/chastity-lick.webp'" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Wipe. Stay useful later.|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'park/spy-fuck'+ random(1, 3) +'.webp'" alt="">
<p class="scene-lead">You imagine spying on someone else getting the real thing while you settle for a distant view and the friction of metal against your cock.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Sneak home locked|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img cage-frame delayed" @src="setup.cageMedia()" alt="">
<p class="scene-lead">The lecture has become porn in your head: alphas get to finish while betas remain locked and wait. Rubbing yourself through the cage feels like completing the lesson.</p>
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Close the textbook|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img cage-frame delayed" @src="setup.ImagePath+'you/chastity-panty.webp'" alt="">
<p class="scene-lead">You rub the cage while imagining yourself in something soft and feminine, replaying the quiz results that made your stomach drop.</p>
<img class="delayed centered cage-frame" @src="setup.cageMedia()" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/caged-stroke1.webp'" alt="">
<img class="delayed centered cage-frame" @src="setup.ImagePath+'you/chastity-cum'+ random(1, 2) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Hide the history without touching the key.|Home]]</div>
</div>
<</nobr>><<nobr>>
<img @src="setup.ImagePath+'you/chastity-dildo.webp'">
<span class="delayed">You work the dildo into yourself, searching for an angle that might let you cum despite the cage.</span>
<<if random(0, 1) eq 0>>
<span class="delayed">After an hour of trying, your body is sore and you are no closer to finishing. You finally give up, frustrated but already wondering if more practice would help.</span>
[[Home][$aroused = $aroused >= 90 ? $aroused : $aroused + 10, $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<<else>>
<span class="delayed">The pressure builds slowly until you find the right rhythm. Your orgasm catches you all at once, even with your cock still trapped.</span>
<img class="delayed" @src="setup.ImagePath+'you/chastity-dildo-cum.webp'">
[[Home][$aroused = 0, $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</if>>
<</nobr>><<nobr>>
<<if hasVisited("School 25 Day anwo") && !$flags.caughtStroking2>>
<<if $flags.day25RulesWarning>>
<p class="delayed">You sit on the edge of the bed with both hands flat on your thighs. Play by the rules, she said. You told her you could.</p>
<<else>>
<p class="delayed">You sit on the edge of the bed and try not to think about how long it has been since you finished.</p>
<</if>>
<img class="centered delayed" @src="setup.ImagePath+'you/bored'+ random(1, 3) +'.jpeg'" alt="Trying to keep both hands away from yourself">
<span id="conv"></span>
<div id="options">
<<you-choice "I'll try to obey her.">>
<<set $flags.day25TriedToObey = true>>
<p class="delayed">You shower, answer two messages, and leave your phone across the room. For a while, it works. Then every shift of your jeans drags against you. By the time you lie down, the promise feels like a dare. Your hand slips under your waistband.</p>
<img class="centered delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="Giving in after trying to obey">
<div class="delayed continue-links">[[Just for a minute. Then stop.|Get caught stroking 2]]</div>
<</you-choice>>
<<you-choice "I'm done pretending. I'm touching myself.">>
<<set $flags.day25TriedToObey = false>>
<p class="delayed">You close the door and reach into your jeans. If you are going to fail, you want one quiet minute before anyone knows.</p>
<img class="centered delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="Breaking the rule immediately">
<div class="delayed continue-links">[[Stroke and forget the time|Get caught stroking 2]]</div>
<</you-choice>>
</div>
<<elseif hasVisited("School 20 Day anwo") && !$flags.caughtStroking1>>
<<if $flags.anniversaryTonight>>
<p class="delayed">Anniversary night. She's waiting, or on her way. You tell yourself you'll be quick. Just enough to think straight.</p>
<<else>>
<p class="delayed">You put your hand around your cock and start stroking, still raw from class, still hungry for her.</p>
<</if>>
<img class="centered delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<div class="continue-links">
[[Try to Finish|Get caught stroking][$strokeState to "after-first-time"]]
</div>
<<elseif $strokeState eq "caged" || $caged>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<p class="scene-lead">You can still try to get off while locked, but not the way you used to.</p>
<div class="genre-grid">
<<link "Stroke cage + porn">><<set _dest = setup.resolveJerkTarget("Stroke cage menu")>><<goto _dest>><</link>>
<<link "Just the steel (no clip)">><<set _dest = setup.resolveJerkTarget("Stroke cage")>><<goto _dest>><</link>>
<<if $backpack.has('dildo')>>
<<link "Dildo">><<set _dest = setup.resolveJerkTarget("Locked Dildo")>><<goto _dest>><</link>>
<</if>>
<<link "Fantasy only (no hands)">><<set _dest = setup.resolveJerkTarget("Jerk fantasy caged menu")>><<goto _dest>><</link>>
<<link "Forget it" "Home">><</link>>
</div>
</div>
<<else>>
/* Free: pick a genre, chance of step-sister walk-in before the beat */
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<h2 class="scene-title">What are you into right now?</h2>
<p class="scene-lead">Pick a fantasy and let your hand follow, but remember that the door might not stay closed.</p>
<div class="genre-grid">
<<link "Girlfriend">><<set _dest = setup.resolveJerkTarget("Jerk genre gf")>><<goto _dest>><</link>>
<<link "Soft cuckold">><<set _dest = setup.resolveJerkTarget("Jerk genre cuck")>><<goto _dest>><</link>>
<<link "Hard cuckold">><<set _dest = setup.resolveJerkTarget("Jerk genre hard cuck")>><<goto _dest>><</link>>
<<link "Femdom / keyholder">><<set _dest = setup.resolveJerkTarget("Jerk genre femdom")>><<goto _dest>><</link>>
<<if setup.genreHas("bbc")>>
<<link "BBC fantasy">><<set _dest = setup.resolveJerkTarget("Jerk genre bbc")>><<goto _dest>><</link>>
<</if>>
<<link "Oral / service">><<set _dest = setup.resolveJerkTarget("Jerk genre oral")>><<goto _dest>><</link>>
<<link "Voyeur / spy">><<set _dest = setup.resolveJerkTarget("Jerk genre voyeur")>><<goto _dest>><</link>>
<<if $world eq "anwo" || ($alphaBeta || 0) gt 0>>
<<link "ANWO / hierarchy">><<set _dest = setup.resolveJerkTarget("Jerk genre anwo")>><<goto _dest>><</link>>
<</if>>
<<if ($alphaBeta || 0) gte 2 || $flags.googledSissy>>
<<link "Sissy tease">><<set _dest = setup.resolveJerkTarget("Jerk genre sissy")>><<goto _dest>><</link>>
<</if>>
<<if setup.genreHas("vesperina")>>
<<link "Goddess Vesperina">><<set _dest = setup.resolveJerkTarget("Jerk genre goddess")>><<goto _dest>><</link>>
<</if>>
<<link "Just finish quick">><<set _dest = setup.resolveJerkTarget("Jerk genre vanilla")>><<goto _dest>><</link>>
<<link "Never mind" "Home">><</link>>
</div>
</div>
<</if>>
/* Gate: maybe step-sister walks in and ruins / hijacks the session (resolved at click time by setup.resolveJerkTarget) */
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You think about $girlfriendName, her mouth, her laugh, the way she says your name when she wants something.</p>
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'girlfriend/sexy'+ random(1, 4) +'.jpeg'" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<p class="delayed">You stroke faster as the fantasy settles into place.</p>
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Finish|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You picture her busy with someone else... sound, heat, you not invited. The jealousy hurts in a way that makes you harder.</p>
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'cuckold/x-sex-'+ random(1, 5) +'.gif'" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<actor-thought you>>
You finish on a thought you will not admit out loud.
<</actor-thought>>
<div class="continue-links">[[Clean up|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You imagine her moaning for him while the bed hits the wall. In the fantasy, you are only an afterthought with a hand on your cock and no claim to the key.</p>
<img class="hero-img porn-frame delayed" @src="setup.genreGif('hardcuck')" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<actor-thought you>>
You cum to the idea of being unnecessary, disgusted by how perfectly it works.
<</actor-thought>>
<div class="continue-links">[[Wipe it off. Pretend you didn't.|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You picture $girlfriendName holding the key while she gives you orders and taps a fingernail against the lock. She laughs every time you ask to be released.</p>
<img class="hero-img cage-frame delayed" @src="setup.cageMedia()" alt="">
<img class="hero-img cage-frame delayed" @src="setup.genreGifPrefer('keyholder', 'femdom', 'cage')" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<actor-thought you>>
Even while you are unlocked, the keyholder fantasy is enough to make you submit before you touch yourself.
<</actor-thought>>
<div class="continue-links">[[Yes, keyholder, in your head|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if !setup.genreHas("vesperina")>>
<p class="scene-lead">There is no assigned clip waiting here. Check Phone Tasks when $girlfriendName sends the next one.</p>
<div class="continue-links">[[Back|Jerk off]]</div>
<<else>>
<p class="scene-lead">You turn on the sound and watch without letting yourself finish. $girlfriendName would probably grade your performance if she knew.</p>
<<print setup.vesperinaHTML()>>
<<actor-thought you>>
<<if $caged>>
The clip loops with the sound on while you strain inside the cage, reduced to an aching audience of one.
<<else>>
The clip loops with the sound on until you finish, feeling much smaller than the fantasy on screen.
<</if>>
<</actor-thought>>
<<if $caged>>
<<run setup.nudgeArousal(12)>>
<<else>>
<<set $aroused = 0>>
<</if>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Close the clip. Still aching.|Home]]</div>
<</if>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if !setup.genreHas("bbc")>>
<p class="scene-lead">That fantasy is not available in this version.</p>
<div class="continue-links">[[Back|Jerk off]]</div>
<<else>>
<p class="scene-lead">You picture her stretched and gasping, ruined for anything smaller, including you. Your hand speeds up as the shame sinks in.</p>
<img class="hero-img porn-frame delayed" @src="setup.genreGif('bbc')" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<actor-thought you>>
ANWO did not invent this fantasy, but it gave you an excuse to indulge it as homework.
<</actor-thought>>
<div class="continue-links">[[Clean up smaller|Home]]</div>
<</if>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">In your fantasy, you kneel between her thighs and use your tongue until she finishes. You do not get to fuck her; you only get to serve.</p>
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'sex/licking.webp'" alt="">
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'sex/orgasm-licking.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Wipe your mouth in the fantasy|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You imagine watching through bushes and gaps in curtains while other bodies move together, confident that the night belongs to them.</p>
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'park/spy-fuck'+ random(1, 3) +'.webp'" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Sneak home in your head|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">The lecture repeats in your head as you stroke: alphas lead, betas wait, and rank decides who holds the keys and who gets to finish.</p>
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'cuckold/x-tease-'+ random(1, 4) +'.gif'" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<actor-thought you>>
You hate how easily the curriculum has turned into porn for you, and how effective it is.
<</actor-thought>>
<div class="continue-links">[[Close the textbook|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You picture yourself in lace while soft, degrading words mingle with memories of the quiz results that made your stomach drop and your cock jump.</p>
<img class="hero-img porn-frame delayed" @src="setup.ImagePath+'phone/sissy1.webp'" alt="">
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Hide the browser history|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="scene-lead">You ignore every fantasy and focus on the friction, breathing harder until the tension finally breaks.</p>
<img class="hero-img delayed" @src="setup.ImagePath+'you/jerk-off'+ random(1, 3) +'.webp'" alt="">
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Done|Home]]</div>
</div>
/* --- Caged: fantasy genre menu (no orgasm, only heat) --- */
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<h2 class="scene-title">Fantasy only</h2>
<p class="scene-lead">Keep your hands off the cage and let the fantasy do the work. You will not finish, but you can make the ache worse.</p>
<div class="genre-grid">
[[Soft cuckold|Jerk fantasy caged cuck]]
[[Hard cuckold|Jerk fantasy caged hard cuck]]
[[Femdom / keyholder|Jerk fantasy caged femdom]]
<<if setup.genreHas("bbc")>>[[BBC fantasy|Jerk fantasy caged bbc]]<</if>>
[[Her + him (generic)|Jerk fantasy caged]]
[[Back|Jerk off]]
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<p class="scene-lead">You keep your hands away and picture her with another man while the key remains out of reach. The ache has nowhere to go.</p>
<img class="centered delayed" @src="setup.ImagePath+'cuckold/x-sex-'+ random(1, 5) +'.gif'" alt="">
<<set $aroused = $aroused gte 95 ? 100 : $aroused + 25>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<actor-thought you>>
You are not supposed to finish. Making yourself even more desperate is the whole point.
<</actor-thought>>
<div class="continue-links">[[Suffer handsomely|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<p class="scene-lead">You do not get to join them. You can only ache inside the cage while you imagine her being used by someone else.</p>
<img class="centered delayed" @src="setup.ImagePath+'cuckold/x-sex-'+ random(1, 5) +'.gif'" alt="">
<<set $aroused = $aroused gte 95 ? 100 : $aroused + 30>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Suffer handsomely|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<p class="scene-lead">The fantasy grows rougher and louder while you remain locked out. Your cock jerks uselessly against the metal as everyone but you gets to finish.</p>
<img class="centered delayed" @src="setup.genreGif('hardcuck')" alt="">
<<run setup.peakArousal()>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Suffer handsomely|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img cage-frame" @src="setup.cageMedia()" alt="">
<p class="scene-lead">You picture her dangling the key and flicking the cage while you beg in silence. She laughs because she knows you cannot do anything without her.</p>
<img class="centered delayed cage-frame" @src="setup.genreGifPrefer('keyholder', 'cage', 'femdom')" alt="">
<<set $aroused = $aroused gte 95 ? 100 : $aroused + 30>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Suffer handsomely|Home]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<<if !setup.genreHas("bbc")>>
<p class="scene-lead">That fantasy is not available in this version.</p>
<div class="continue-links">[[Back|Jerk fantasy caged menu]]</div>
<<else>>
<img class="hero-img" @src="setup.ImagePath+'you/locked1.webp'" alt="">
<p class="scene-lead">You stare at the difference in size as your cock tries to rise and presses painfully against the locked metal. You cannot make yourself look away.</p>
<img class="centered delayed" @src="setup.genreGif('bbc')" alt="">
<<run setup.peakArousal()>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="continue-links">[[Suffer handsomely|Home]]</div>
<</if>>
</div>
<</nobr>><<nobr>>
<p>You can no longer think clearly enough to focus on anything except stroking. You do not understand why the scene in class affected you this much, but your cock refuses to soften.</p>
<<actor you>>
I need to get it down before $girlfriendName comes over.
<</actor>>
<<include "Jerk off">>
<</nobr>><<nobr>>
/* Entire caption is nobr — SugarCube turns newlines into <br> and piles empty space in the left bar. */
<<run setup.migrateLegacyScore()>>
<<run setup.migratePublicScore()>>
<<run setup.ensureEdgeReportState()>>
<<run setup.normalizeNightlifeState()>>
<img @src="setup.ImagePath+'meta/logo-transparent.png'" class="logo">
<<if $flags.phoneUnlocked || $world eq "anwo">>
<<set _sidePhoneN = setup.phoneNotifyTotal()>>
<<set _sidePhoneGo = _sidePhoneN gt 0 ? setup.phoneNotifyPassage() : "Phone">>
<<set _sidePhoneHint = _sidePhoneN gt 0 ? setup.phoneNotifyHint() : "">>
<<if _sidePhoneN gt 0>>
<div class="chat-links sidebar-phone has-badge">
<<link `"📱 Phone · " + _sidePhoneHint` _sidePhoneGo>><<run setup.capturePhoneOrigin(passage(), _sidePhoneGo)>><</link>>
<span class="sidebar-phone-badge" aria-label="notifications"><<= _sidePhoneN >></span>
</div>
<<else>>
<div class="chat-links sidebar-phone">
<<link "📱 Phone" "Phone">><<run setup.capturePhoneOrigin(passage(), "Phone")>><</link>>
</div>
<</if>>
<</if>>
<div class="status-panel">
<div class="status-row"><span class="status-label"><<print $gameDate.toLocaleDateString(undefined,{ weekday: 'short' })>> · <<print $gameDate.getHours()>>:00</span><span>$ <<print $money>></span></div>
<div class="status-row"><span>School day <<print $schoolDay>></span><span><<print $world>></span></div>
<div class="status-row"><span class="status-label">Arousal</span><span><<print $aroused>>/100</span></div>
<div class="status-meter"><span @style="'width:' + Math.min(100, $aroused) + '%'"></span></div>
<div class="status-row"><span class="status-label">GF favor</span><span><<print $girlfriendTrustLevel>>/10</span></div>
<div class="status-meter trust"><span @style="'width:' + Math.min(100, $girlfriendTrustLevel * 10) + '%'"></span></div>
<<if $world eq "anwo">>
<div class="status-row identity-row"><span class="status-label">Mindset</span><span class="<<if setup.isResistant()>>is-resistant<<elseif setup.isDevoted()>>is-devoted<<else>>is-unsettled<</if>>"><<= setup.mindsetLabel().text>></span></div>
<div class="identity-labels" aria-hidden="true"><span>Resistance 10</span><span>Unsettled</span><span>Devotion 10</span></div>
<div class="status-meter identity" role="meter" aria-label="Resistance Devotion mindset" aria-valuemin="-10" aria-valuemax="10" @aria-valuenow="$alphaBeta">
<span class="identity-marker" @style="'left:calc(' + setup.identityPercent() + '% - 4px)'"></span>
</div>
<<if setup.classRankingUnlocked()>>
<<set _publicLabel = setup.publicRoleLabel()>><<set _publicRank = setup.getPlayerClassRank()>>
<div class="public-rank-block">
<div class="status-row public-rank-row"><span class="status-label">Public</span><span @class="_publicRank && _publicRank.isAlpha ? 'is-alpha' : 'is-beta'"><<link `_publicLabel.text + (_publicRank ? " · #" + _publicRank.rank : "")` "Phone ranks">><<run setup.capturePhoneOrigin(passage(), "Phone ranks")>><</link>></span></div>
<div class="identity-labels public-rank-labels" aria-hidden="true"><span>Alpha -10</span><span>0</span><span>Beta +10</span></div>
<div class="status-meter identity public-recognition" role="meter" aria-label="Public Alpha Beta recognition" aria-valuemin="-10" aria-valuemax="10" @aria-valuenow="$publicAlphaBeta">
<span class="identity-marker public-marker" @style="'left:calc(' + setup.publicRecognitionPercent() + '% - 4px)'"></span>
</div>
</div>
<</if>>
<</if>>
<<if $caged || $cageAcceptance isnot null>>
<div class="status-badges">
<<if $caged>><span class="status-badge hot">Caged</span><</if>>
<<if !$caged && $cageAcceptance isnot null>><span class="status-badge">Cage: $cageAcceptance</span><</if>>
</div>
<</if>>
</div>
<<if settings.debugMode>>
<div class="status-panel debug-panel">DEBUG · $strokeState / $relationshipState / $caged / $schoolDay · mindset <<= $alphaBeta>>/10 · public <<= $publicAlphaBeta>>/10 · <<= setup.personality()>> · <<print JSON.stringify($flags)>> · Open: <<textbox "_passageName" "">><<button "Go">><<goto _passageName>><</button>></div>
<</if>>
<div class="aside-links"><<link "Inventory" "Inventory">><<set $inventoryOrigin = passage()>><</link>></div>
<</nobr>><<set $day = 0>>
<<set $strokeState = 'initial'>>
<<set $relationshipState = "initial">>
<<set $world = "normal">>
<<set $sisterTaskChapter = 0>>
<<set $aroused = 0>>
<<set $followedSisterReceivingCage = false>>
<<set $gameDate = new Date(2024, 0, 1, 8, 0, 0, 0)>>
<<set $caged = false>>
<<set $work = 'unemployed'>>
<<set $jobMailCounter = 0>>
<<set $workShiftsDone = 0>>
<<set $nightlifeRep = 0>>
<<set $nightlifeShiftsDone = 0>>
<<set $schoolDay = 1>>
<<set $money = 0>>
/* Private mindset and public recognition use separate -10 (alpha) .. +10 (beta) scores. */
<<set $alphaBeta = 0>>
<<set $publicAlphaBeta = 0>>
<<set $girlfriendTrustLevel = 10>>
<<set $hustleLastDone = {}>>
/* Personality is derived live via setup.isEager()/setup.isResist()/setup.isSubmissive(); no cached $personality. */
/* Quest flags (prefer these over hasVisited for progression) */
<<set $flags = {
chapterStart: "",
chapterStance: "",
identityScoreBeats: {},
recognitionScoreBeats: {},
mindsetCommitment: null,
phoneUnlocked: false,
phone1Read: false,
phone2Read: false,
googledSissy: false,
sissyHintGiven: false,
sissyTestDone: false,
sissyTestDeclined: false,
surveyPark: false,
surveySister: false,
surveyParkConcern: null,
noticedSmell: false,
keptQuietSmell: false,
caughtStroking1: false,
caughtStroking2: false,
day25TriedToObey: false,
fountain10Done: false,
fountain20Done: false,
anniversaryTonight: false,
day25RulesWarning: false,
day8SpokeUp: false,
surveyCaveatSubmitted: null,
day10Confessed: false,
day10ConcernRecorded: false,
day12BlameSelf: false,
day12FearBeta: false,
day12ReachedHand: false,
day12PrivateDone: false,
day13CompleteAnswer: null,
/* Day 20: true = MC exposed himself; false = he refused and stayed clothed. */
day20Exposed: null,
phone3Read: false,
phone4Read: false,
/* Day 35 → Day 40 group-chat presentation teaser */
presentationTeaseRead: false,
presentationPrepRead: false,
presentationMorningRead: false,
phoneOvernightPending: false,
phoneOvernightRead: false,
/* Avoid back-to-back identical overnight Snap lines */
lastSnapText: "",
/* One shared random Jenny/Jamal Snap slot per calendar week */
lastAmbientSnapWeekKey: "",
/* Occasional bully Snap pics (ids in setup.bullySnapCatalog) */
bullySnapQueue: [],
sisterVisit1: false,
sisterVisit2: false,
sisterVisit3: false,
/* Becky chore pool: last rotation index + how often the player has served her. */
sisterChoreLast: 0,
sisterChoreCount: 0,
giftForKeyholder: false,
giftDelivered: false,
parkChemistryDone: false,
/* Bush-voyeur situation memory for the one-anti-repeat roll. */
parkSpyLast: 0,
/* Washroom side-scene memory, same one-anti-repeat idiom. */
mallWcLast: 0,
parkWcLast: 0,
mallRiskDone: false,
schoolKeyRiskDone: false,
phoneLeakScareDone: false,
anwoDeclined: false,
/* Deferrals stay optional; anwoVirusForced preserves only legacy forced-install history. */
anwoDeclineCount: 0,
anwoVirusForced: false,
anwoPermanentlyDeclined: false,
anwoAccepted: false,
/* Normal day 1: saw the current couple before the ANWO rewrite. */
day1ExKissSeen: false,
normalSchoolIntroSeen: false,
normalSurveyHelped: null,
normalGameSeen: false,
anwoSchoolIntroSeen: false,
mustResolveCage: false,
questHint: "",
showQuestGuidance: false,
day3SurveyDone: false,
fieldSurveyOpen: false,
/* Set at end of School 1 Day anwo — group exists before project phone chat */
anwoGroupFormed: false,
/* Overnight / home nudge after day 8 submit before day 10 class */
resultsLiveSeen: false,
day8Submitted: false,
day15Passed: false,
day15EssayDone: false,
day16TalkStance: "",
day16FavorGiven: false,
/* Class Alpha/Beta board (Phone Ranks app) live after Day 12 */
classListLive: false,
/* Public recognition changed since Class board / Phone Ranks was opened. */
publicRankUnread: false,
/* Post-cage cuckold / chastity optional scenes */
keyRulesDone: false,
keyRulesStance: "",
nightOutDepartureDone: false,
nightOutDepartureStance: "",
nightOutSmellDone: false,
/* Resistance split: Jenny remains keyholder, but no other men enter the relationship. */
noAlphaBoundary: false,
noAlphaRelationshipDone: false,
noAlphaBoundaryOrigin: "",
noAlphaFridayPlansDone: false,
noAlphaFridayStance: "",
noAlphaFridayNightDone: false,
noAlphaFridayNightStance: "",
noAlphaFridayDone: false,
noAlphaFridayDebriefStance: "",
cheatingBreakupDone: false,
ultimateBreakupDone: false,
cagedWaitDone: false,
cagedServiceDone: false,
firstServiceDone: false,
cagedVoyeurDone: false,
alphaProofDone: false,
/* Act III Ch2, bully presence after alpha proof */
hallwayHierarchyDone: false,
bullyCheckInDone: false,
keyholderDebriefDone: false,
bullyPresenceDone: false,
/* Act III Ch3, ultimate humiliation (after bully presence; intentional escalation) */
ultimateHumiliationDone: false,
/* Act III Ch4, morning after ultimate: permanent owned rules */
ownedMorningAfterDone: false,
/* Post-Ch4 public keyholder tease in the park */
parkKeyholderTeaseDone: false,
/* Post-Owned school checkpoints and v0.4 final-ranking chapter */
day26Done: false,
day31DataAuditDone: false,
day31Contribution: "",
day34PresentationTalkDone: false,
day34JennyStance: "",
day35PublicHumiliationDone: false,
day37SlideDecision: "",
day39RehearsalDone: false,
day39RehearsalResult: "",
day40PresentationDone: false,
day40SlideChallenged: null,
day40PrivateSlideState: null,
finalRankingSeen: false,
finalRankingResult: null,
projectArchiveRole: "",
projectArchiveAccess: "",
projectArchiveDone: false,
ownedPublicRoleAccepted: false,
keyholderPresentationDebriefDone: false,
doubleBullChairDone: false,
alessiaSoloTeaseSeen: false,
/* Act III Ch6, Alessia's borrowed-Friday payoff */
alessiaFridayInstructionsDone: false,
alessiaFridayDresscodeDone: false,
alessiaFridayDresscode: "",
alessiaFridayVipDone: false,
alessiaFridayDanceDone: false,
alessiaFridayDanceStance: "",
alessiaBorrowedFridayDone: false,
alessiaFridayClubStance: "",
alessiaFridayPanties: "",
alessiaFridayDriveDone: false,
alessiaFridayDebriefDone: false,
alessiaFridayDebriefStance: "",
/* Act III Ch7, Alessia's requested hour with the key */
alessiaKeyTermsDone: false,
alessiaKeyConsent: "",
alessiaKeyTouchConsent: "",
alessiaKeyFridayAt: 0,
alessiaKeyParkDone: false,
alessiaKeyParkStance: "",
jennyParkMemorySeen: false,
alessiaKeySchoolDone: false,
alessiaKeySchoolStance: "",
alessiaKeyCafeDone: false,
alessiaKeyContactRule: "",
jennyCafeMomentSeen: false,
alessiaKeyPrepDone: false,
alessiaKeyPickupStyle: "",
alessiaKeyPickupDone: false,
alessiaKeyPickupStance: "",
alessiaKeyHandoffDone: false,
alessiaKeyTransferOccurred: false,
alessiaKeyCurrentHolder: "jenny",
alessiaKeyDriveResponse: "",
alessiaKeyDriveDone: false,
alessiaKeyReturnDone: false,
alessiaHeldKeyForHour: false,
alessiaKeyReturned: false,
alessiaKeyDebriefStance: "",
alessiaKeyChapterDone: false,
postKeySisterCheckinDone: false,
postKeyWorkCheckinDone: false,
/* Chapter break banner: set to setup.GAME_VERSION when player opens End of content (once per release) */
chapterBreakSeenVersion: "",
/* Hotel work: Jenny ordered pink brief under slacks (tier 2 setup) */
workPinkBriefOrdered: false,
workPinkBriefOn: false,
/* Boss one-time simple job pitch */
workBossBriefed: false,
/* v0.6.0 hotel work heat pass: boss mini-arc stage, one-shot Jenny event
shifts, and the per-tier vignette memory for anti-repeat rolls. */
workBossArc: 0,
workEventPlugDone: false,
workEventPlugStance: "",
workEventPlugHomeDone: false,
workEventPhotoDone: false,
workEventPhotoStance: "",
workEventPhotoHomeDone: false,
workLastVignette: 0,
/* v0.6.0 ANWO web side content: Phone Browser trend-of-the-day stamp */
webTrendLastDayNum: null,
/* Independent nightlife side progression: hotel trust -> park -> Velvet Rooms. */
nightlifeContactDone: false,
nightlifeContactStance: "",
nightlifeContactDayNum: null,
nightlifeContactShift: 0,
nightlifeDiscretionOneDone: false,
nightlifeDiscretionOneStance: "",
nightlifeDiscretionOneDayNum: null,
nightlifeDiscretionOneShift: 0,
nightlifeDiscretionTwoDone: false,
nightlifeDiscretionTwoStance: "",
nightlifeDiscretionTwoDayNum: null,
nightlifeDiscretionTwoShift: 0,
nightlifeParkDone: false,
nightlifeParkStance: "",
nightlifeParkDayNum: null,
nightlifeParkWcDone: false,
nightlifeParkWcStance: "",
nightlifeOfferDone: false,
nightlifeRole: "",
nightlifeOfferDayNum: null,
nightlifeTourDone: false,
nightlifeTourBoundary: "",
nightlifeTourDayNum: null,
nightlifeTrialAccepted: null,
nightlifeFirstShiftDone: false,
nightlifeFirstShiftStance: "",
nightlifeLastShiftDayNum: null,
/* v0.6.0 Velvet Rooms as a recurring evening venue: roster note, repeatable
evening shifts, paid guest sessions, and the one-shot stance fallout beat. */
nightlifeRosterNoteDone: false,
nightlifeVelvetExtraTask: false,
nightlifeGuestVisits: 0,
nightlifeGuestLastDayNum: null,
nightlifeStanceBeatDone: false,
nightlifeStanceBeatStance: "",
nightlifeEchoDebriefDone: false,
nightlifeLastShiftBeat: 0,
nightlifeJennyKnows: false,
nightlifeJennyFavored: false,
/* Mall lingerie errands (optional side chain after keyholder debrief) */
lingerie1Done: false,
lingerie2Done: false,
lingerie3Done: false,
/* Phone Gallery, Jenny caption pics */
galleryApp: false,
galleryFavorBonus: false,
captionUnread: [],
/* Edge Report sequential caption story (0 = next is first reward) */
captionStoryProgress: 0,
noAlphaCaptionStoryProgress: 0,
edgeLastTaskId: "",
/* Edge Report / Clip homework, ~1–2× per week (day-num cooldowns) */
edgeLastDayKey: "",
goddessLastDayKey: "",
goddessPlaylistComplete: false,
/* Side hustles (Beta-gated paid gigs) */
hustleUnlocked: false,
hustleLastDayNum: null,
wearingUsedPanty: false,
keyWithBully: false,
sleepSkipEvening: false,
/* Step-sister random walk-in during jerk (cooldown via day num) */
sisterJerkLastDayNum: null,
/* Step-sister date-prep walk-in when visiting her (3-day CD) */
sisterDatePrepLastDayNum: null,
/* Friday date ladder: 0 gf → 1 keyholder → 2 public → 3 bull1 → 4 bull2 → 5 both → 6 alessia → 7 repeat */
fridayDateLastKey: "",
fridayDateStage: 0
}>>
/* Second bull on Fridays = her ex ($exfriendName). No separate bull2 name. */
/* Edge Report streak (repeatable keyholder tasks) */
<<set $edgeStreak = 0>>
<<set $edgeBest = 0>>
<<set $edgeHeat = 0>>
<<set $edgeBirdScore = 0>>
<<set $edgeBirdHits = 0>>
<<set $edgeBirdWon = false>>
<<set $edgeBirdRetries = 0>>
<<set $edgeTruthMistakes = 0>>
<<set $edgeTask = null>>
<<set $edgeReportState = null>>
/* Goddess homework: each clip index watched once (1…max); scores for “best of set” */
<<set $goddessWatched = []>>
<<set $goddessPendingClip = null>>
<<set $goddessClipScores = {}>>
<<set $goddessBestClip = null>>
/* Jenny caption gallery (ids from setup.captionCatalog) */
<<set $gallery = []>>
/* Passage-based utility origins. Cleared when the utility closes. */
<<set $phoneOrigin = "">>
<<set $inventoryOrigin = "">>
/* Open-ended VN chapter tracker (expand for months, no forced ending) */
<<set $storyAct = 0>>
<<set $storyBeat = "">>
<<set $chapterStartChoice = "">>
/* How the player accepted the cage: null | "eager" | "reluctant" | "forced" | "refused" */
<<set $cageAcceptance = null>>
/* Single inventory owner, Chapel Simple Inventory */
<<set $backpack to Inventory.create()>>
<<masteraudio muteonhide>>
<<cacheaudio "reception_bell" "assets/audio/work/reception_bell.mp3">>
<<cacheaudio "time_to_go_to_school" "assets/audio/time_to_go_to_school.mp3">>
<<cacheaudio "have_eyes" "assets/audio/have_eyes.mp3">><<nobr>>
<<if setup.hasPendingChapter()>>
<<set _dest = setup.applyPendingChapter()>>
<<if _dest>><<goto _dest>><</if>>
<</if>>
<div class="scene-panel start-panel">
<img class="hero-img start-18" @src="setup.ImagePath+'meta/18-jenny-stop-hc-2.webp'" alt="18+">
<h2 class="scene-title">Beginning of CGC</h2>
<p class="hint-line version-line">v<<= setup.GAME_VERSION>></p>
<p class="scene-lead"><strong>All characters are 18 or older.</strong></p>
<p class="hint-line">Chastity, cuckold themes, humiliation, hierarchical power dynamics.</p>
<p class="hint-line">May include rapid light changes (stroboscopic effects).</p>
<p class="hint-line">Main story arc in progress. More chapters coming soon.</p>
<div class="continue-links">
[[I am 18+. Continue|I confirm]]
</div>
</div>
<</nobr>><<nobr>>
<<if Save.autosave.ok() and Save.autosave.has()>>
<<set _auto = Save.get().autosave>>
<div class="continue-links">
<<link "Continue where you left off">><<run Save.autosave.load()>><</link>>
</div>
<p class="hint-line">Autosave from <<= _auto and _auto.date ? new Date(_auto.date).toLocaleString() : "an earlier session" >>. Starting below replaces it.</p>
<</if>>
<p>Name the cast. Defaults are fine if you just want to play.</p>
<div class="name-card">
<img @src="setup.ImagePath+'you/pp.webp'" width="72" height="72">
<div><label>You</label><<textbox "$youName" "You">></div>
</div>
<div class="name-card">
<img @src="setup.ImagePath+'sister/pp.webp'" width="72" height="72">
<div><label>Adult step-sister</label><<textbox "$sisterName" "Becky">></div>
</div>
<div class="name-card">
<img @src="setup.ImagePath+'girlfriend/pp.webp'" width="72" height="72">
<div><label>Crush / girlfriend</label><<textbox "$girlfriendName" "Jenny">></div>
</div>
<div class="name-card">
<img @src="setup.ImagePath+'bestfriend/pp.webp'" width="72" height="72">
<div><label>Her best friend</label><<textbox "$bestfriendName" "Alessia">></div>
</div>
<div class="name-card">
<img @src="setup.ImagePath+'exfriend/pp.webp'" width="72" height="72">
<div><label>Her boyfriend at the start (later her ex)</label><<textbox "$exfriendName" "Tom">></div>
</div>
<div class="name-card">
<img @src="setup.ImagePath+'bully/pp.webp'" width="72" height="72">
<div><label>Bully / later first bull</label><<textbox "$bullyName" "Jamal">></div>
</div>
<div class="name-card">
<img @src="setup.ImagePath+'teacher/pp.webp'" width="72" height="72">
<div><label>Teacher</label><<textbox "$teacherName" "Victoria">></div>
</div>
<div class="continue-links">
[[Start full story|Wake Up]]
[[Choose a chapter|Chapter select]]
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<h2 class="scene-title">Choose a starting point</h2>
<p class="scene-lead">Skip completed chapters and begin with a consistent story state. Cast names above are preserved.</p>
<p class="hint-line">Later quick starts preset earlier decisions, but future choices remain open.</p>
<div class="chapter-start-grid">
<article class="chapter-start-card chapter-start-recommended">
<div class="chapter-start-thumb">
<img @src="setup.ImagePath+'you/sleep1.jpeg'" alt="The MC waking up before the first school day">
<span class="chapter-start-badge">Recommended</span>
</div>
<div class="chapter-start-copy">
<h3>Full Story</h3>
<p>Normal world, Day 1. Meet everyone and make every decision yourself.</p>
<p class="hint-line">Skips nothing.</p>
<<link "Start full story">><<run setup.queueChapterStart("prologue")>><</link>>
</div>
</article>
<article class="chapter-start-card">
<div class="chapter-start-thumb">
<img @src="setup.ImagePath+'story/act1/day1-anwo-lecture.jpg'" alt="The first ANWO school briefing">
</div>
<div class="chapter-start-copy">
<h3>ANWO Begins</h3>
<p>Relationship rewrite, Day 1. Start when the new rules take hold.</p>
<p class="hint-line">Skips the normal-world introduction.</p>
<<link "Begin ANWO">><<run setup.queueChapterStart("anwo")>><</link>>
</div>
</article>
<article class="chapter-start-card">
<div class="chapter-start-thumb">
<img @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="The keyholder preparing the cage and its key">
</div>
<div class="chapter-start-copy">
<h3>The Cage Clicks</h3>
<p>Begin the keyholder relationship just after $girlfriendName locks the cage.</p>
<p class="hint-line">Skips the ANWO school setup and cage build-up.</p>
<<link "Choose previous stance" "Chapter start setup">><<set $chapterStartChoice = "cage">><</link>>
</div>
</article>
<article class="chapter-start-card">
<div class="chapter-start-thumb">
<img @src="setup.ImagePath+'story/owned/day40-class-arrival.jpg'" alt="The class gathering for the school project finale">
</div>
<div class="chapter-start-copy">
<h3>Final Ranking</h3>
<p>Begin the school project finale and the last stretch toward the presentation.</p>
<p class="hint-line">Main route: other men remain permitted. Weekend hotel job included.</p>
<<link "Review route assumptions" "Chapter start setup">><<set $chapterStartChoice = "final-ranking">><</link>>
</div>
</article>
<article class="chapter-start-card">
<div class="chapter-start-thumb">
<img @src="setup.ImagePath+'story/owned/ch6/alessia-instructions.jpg'" alt="Alessia preparing the borrowed-Friday instructions">
<span class="chapter-start-badge">v0.5</span>
</div>
<div class="chapter-start-copy">
<h3>Borrowed Friday</h3>
<p>Begin after the final ranking, then play through $bestfriendName's borrowed Friday and requested hour with the key.</p>
<p class="hint-line">Latest chapter. Main route with other men permitted. Weekend hotel job included.</p>
<<link "Review route assumptions" "Chapter start setup">><<set $chapterStartChoice = "borrowed-friday">><</link>>
</div>
</article>
</div>
<div class="continue-links delayed">[[Back to names|I confirm]]</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact chapter-stance-panel">
<<if $chapterStartChoice is "cage">>
<img class="chapter-stance-image" @src="setup.ImagePath+'story/act2/cage-lock-ready.jpg'" alt="The keyholder preparing the cage and its key">
<p class="hint-line">The Cage Clicks · Begin the keyholder relationship</p>
<<elseif $chapterStartChoice is "final-ranking">>
<img class="chapter-stance-image" @src="setup.ImagePath+'story/owned/day40-class-arrival.jpg'" alt="The class gathering for the school project finale">
<p class="hint-line">Final Ranking · Main relationship route</p>
<<elseif $chapterStartChoice is "borrowed-friday">>
<img class="chapter-stance-image" @src="setup.ImagePath+'story/owned/ch6/alessia-instructions.jpg'" alt="Alessia preparing the borrowed-Friday instructions">
<p class="hint-line">Borrowed Friday + Key for an Hour · Latest main-route chapters</p>
<<else>>
<p class="hint-line">Choose a quick start first.</p>
<</if>>
<<if $chapterStartChoice is "cage">>
<h2 class="scene-title">Choose your previous stance</h2>
<p class="scene-lead">This sets the tone of earlier decisions. The choice to permit or forbid other men still happens later in the story.</p>
<div class="chapter-stance-grid">
<article class="chapter-stance-card">
<h3>Devoted / Compliant</h3>
<p>You generally accepted <<= $girlfriendName>>'s rules and the public role assigned to you.</p>
<<link "Use devoted history">><<run setup.queueChapterStart($chapterStartChoice, "devoted")>><</link>>
</article>
<article class="chapter-stance-card">
<h3>Resistant / Defiant</h3>
<p>You challenged <<= $girlfriendName>>'s rules and defended yourself publicly.</p>
<<link "Use resistant history">><<run setup.queueChapterStart($chapterStartChoice, "resistant")>><</link>>
</article>
<article class="chapter-stance-card">
<h3>Mixed</h3>
<p>You resisted privately but often complied in public.</p>
<<link "Use mixed history">><<run setup.queueChapterStart($chapterStartChoice, "mixed")>><</link>>
</article>
</div>
<<elseif $chapterStartChoice is "final-ranking">>
<h2 class="scene-title">Main-route history</h2>
<p class="scene-lead">This quick start assumes you continued the relationship with other men permitted. $bullyName and $exfriendName are already part of $girlfriendName's Friday dynamic.</p>
<p class="hint-line">The No-Alpha branch reaches its current ending before this chapter. Final Ranking continues the established main route and its earlier Bull scenes.</p>
<p class="hint-line">The weekend hotel job is included. Choose how far that story has already gone.</p>
<img class="chapter-stance-image" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="The reception lounge inside the Velvet Rooms">
<div class="chapter-stance-grid">
<article class="chapter-stance-card">
<h3>Hotel desk only</h3>
<p>Mara has not approached you yet. Her other workplace stays a rumor until you handle her quiet tests over more weekend shifts.</p>
<<link "Start at the hotel desk">><<run setup.queueChapterStart("final-ranking")>><</link>>
</article>
<article class="chapter-stance-card">
<h3>Velvet tour offered</h3>
<p>Mara explained her venue in the park and left you the appointment card. The paid tour is ready today, and the boundary you record inside it stays yours.</p>
<<link "Start with the tour card">><<run setup.queueChapterStart("final-ranking", "", "velvet-offer")>><</link>>
</article>
<article class="chapter-stance-card">
<h3>First Velvet shift complete</h3>
<p>The tour and your first shift are behind you, kept under a private alias. Future Velvet work stays open.</p>
<<link "Start after the first shift">><<run setup.queueChapterStart("final-ranking", "", "velvet-shift")>><</link>>
</article>
</div>
<<elseif $chapterStartChoice is "borrowed-friday">>
<h2 class="scene-title">Main-route history</h2>
<p class="scene-lead">This quick start assumes the final ranking, $girlfriendName's private debrief, and the double-bull chair night are complete.</p>
<p class="hint-line">The No-Alpha branch ends earlier. Borrowed Friday begins after $bestfriendName's solo club teaser, with every Ch6 choice open before it carries into the key-hour continuation.</p>
<p class="hint-line">The weekend hotel job is included. Choose how far that story has already gone.</p>
<img class="chapter-stance-image" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="The reception lounge inside the Velvet Rooms">
<div class="chapter-stance-grid">
<article class="chapter-stance-card">
<h3>Hotel desk only</h3>
<p>Mara has not approached you yet. Her other workplace stays a rumor until you handle her quiet tests over more weekend shifts.</p>
<<link "Start at the hotel desk">><<run setup.queueChapterStart("borrowed-friday")>><</link>>
</article>
<article class="chapter-stance-card">
<h3>Velvet tour offered</h3>
<p>Mara explained her venue in the park and left you the appointment card. The paid tour is ready today, and the boundary you record inside it stays yours.</p>
<<link "Start with the tour card">><<run setup.queueChapterStart("borrowed-friday", "", "velvet-offer")>><</link>>
</article>
<article class="chapter-stance-card">
<h3>First Velvet shift complete</h3>
<p>The tour and your first shift are behind you, kept under a private alias. Future Velvet work stays open.</p>
<<link "Start after the first shift">><<run setup.queueChapterStart("borrowed-friday", "", "velvet-shift")>><</link>>
</article>
</div>
<</if>>
<div class="continue-links delayed">[[Back|Chapter select][$chapterStartChoice = ""]]</div>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'you/relaxed.png'" alt="Getting ready for the first school morning">
<p class="scene-lead">Your alarm is still ringing when $sisterName knocks on the open door. She has a towel over one shoulder.</p>
<<actor sister>>
Are you getting up? I need the bathroom before we leave.
<</actor>>
<<actor you>>Two minutes.<</actor>>
<<actor sister>>You said that before the alarm. Come on, move.<</actor>>
<p>You turn it off and reach for the clothes on your chair.</p>
<div class="continue-links">[[Get dressed and leave for school|'go to School ' + $world]]</div>
<</nobr>><<nobr>>
<<masteraudio stop>>
<img @src="setup.ImagePath+'you/relaxed.png'">
You put on your clothes and [[go to School|'go to School ' + $world]].
<</nobr>><<nobr>>
<<inv $backpack>>
<<set _inventoryReturn = $inventoryOrigin && $inventoryOrigin neq "Inventory" ? $inventoryOrigin : "Home">>
<div class="continue-links"><<link "Return" _inventoryReturn>><<set $inventoryOrigin = "">><</link>></div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'places/mall.png'" alt="">
<<if $caged>>
<p class="scene-lead">Crowd noise and a secret under your clothes. Cash: <strong>$<<print $money>></strong></p>
<<elseif $money lt 15>>
<p class="scene-lead">The mall wants money. You have <strong>$<<print $money>></strong>.</p>
<<else>>
<p class="scene-lead">Stores and bad ideas. Cash: <strong>$<<print $money>></strong></p>
<</if>>
<div class="hub-actions">
<<if setup.alphaRouteOpen() && $caged && $flags.keyholderDebriefDone && (!$flags.lingerie1Done || !$flags.lingerie2Done || !$flags.lingerie3Done)>>
<<if !$flags.lingerie1Done>>
[[Lingerie boutique, her order|Lingerie errand 1]]
<<elseif !$flags.lingerie2Done>>
[[Lingerie boutique, two sets|Lingerie errand 2]]
<<else>>
[[Lingerie boutique, final order|Lingerie errand 3]]
<</if>>
<</if>>
<<if $caged && !$flags.mallRiskDone>>[[Fitting room…|Risk mall almost caught]]<</if>>
[[XXX-store]]
[[Men's toilet|Men's Toilet]]
[[Home]]
</div>
</div>
<</nobr>><<nobr>>
<<if !setup.alphaRouteOpen() || !$flags.keyholderDebriefDone || $flags.lingerie1Done>>
<div class="scene-panel compact"><p class="scene-lead">The boutique is closed to you right now.</p><div class="continue-links">[[Mall]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/mall.png'" alt="">
<p class="delayed">Your phone buzzed before you even found the store map.</p>
<<actor girlfriend>>
(text) Get me a black lace set. My size is in the note, and you're paying with your card.
Don't send me pictures of the rack like a creep. Pick it up and leave.
<</actor>>
<<actor-thought you>>
You are spending your money on lace for her body while the cage rests cold beneath your jeans.
<</actor-thought>>
<p class="delayed">The boutique smells of perfume samples and new plastic hangers. Quiet music plays beneath warm lights as a clerk greets you with a polite smile.</p>
<p class="hint-line">What she ordered (product example):</p>
<div class="lingerie-products">
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('black-lace')" alt="black lace set">
<span class="lingerie-product-label"><<= setup.lingerieLabel('black-lace') >><span class="lingerie-product-tag">$40 · for $girlfriendName</span></span>
</div>
</div>
<p class="hint-line">Cash on hand: $<span><<= $money>></span> · set costs <strong>$40</strong></p>
<<if $money lt 40>>
<p class="delayed">You do not have the forty dollars she expects you to spend. The lace has to remain on the hanger until you earn more.</p>
<<actor-thought you>>
I need to work or find some other way to earn it. She will know if I stall.
<</actor-thought>>
<div class="continue-links">
[[Back to mall|Mall]]
[[Home, earn money first|Home]]
</div>
<<else>>
<span id="conv"></span>
<div id="options">
<<you-choice "Grab the black set. Don't overthink.">>
<<set $money -= 40>>
<<run setup.nudgeArousal(8)>>
<p class="delayed">You carry the lace to the counter between two fingers. The clerk scans it without showing any surprise.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Gift for someone special?</span></div></div>
<<actor you>>
Uh... Yeah, for my girlfriend.
<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">That's nice. I can put it in a gift bag for you.</span></div></div>
<<actor-thought you>>
You nod instead of explaining that she ordered you to buy it and kept the key to your cage.
<</actor-thought>>
<div class="delayed">[[Pay and leave|Lingerie errand 1 done]]</div>
<</you-choice>>
<<you-choice "Text her which one, need approval.">>
<<actor girlfriend>>
(text) I already told you black, so stop stalling and buy it. 🙄
<</actor>>
<<set $money -= 40>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(8)>>
<p class="delayed">You buy the black set and fold the receipt into your pocket. She replies to your confirmation with a single check mark.</p>
<div class="delayed">[[Done|Lingerie errand 1 done]]</div>
<</you-choice>>
</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<set $flags.lingerie1Done = true>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="scene-panel compact">
<p class="delayed">Before you reach the parking lot, her reply lights your phone beneath the mall awning. You look down at the black lace in the open bag.</p>
<img class="hero-img centered delayed" @src="setup.lingerieURL('black-lace')" alt="black lace set in the shopping bag">
<<if $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>
(text) Leave the bag at my place, and don't hang around waiting for a thank-you. 😐
<</actor>>
<<elseif $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>
(text) I got it. I'll wear it when I feel like it, and you don't get to choose who sees it. 😏
<</actor>>
<<else>>
<<actor girlfriend>>
(text) I like buying pretty things for my body with your money. 😘
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<</if>>
<<actor-thought you>>
You carry the bright shopping bag to the car, knowing someone else may be the one who peels the lingerie off her.
<</actor-thought>>
<div class="continue-links">
[[Mall]]
[[Home]]
[[Phone gallery]]
</div>
</div>
<</nobr>><<nobr>>
<<if !setup.alphaRouteOpen() || !$flags.lingerie1Done || $flags.lingerie2Done>>
<div class="scene-panel compact"><p class="scene-lead">The boutique is closed to you right now.</p><div class="continue-links">[[Mall]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/mall.png'" alt="">
<<actor girlfriend>>
(text) Change of plans. You're buying one set for me and one for $bestfriendName.
The sizes are in the note. Mine is black lace, and hers is the loud electric blue one.
You're paying for both. She already laughed when I told her.
<</actor>>
<<actor bestfriend>>
(text) OMG, if he actually finds my size, I'm going to die laughing.
Don't expect me to help you, loser.
<</actor>>
<<actor-thought you>>
You have to buy lingerie for both women, and neither set is meant for you. You can already hear $bestfriendName laughing when she sees the bag.
<</actor-thought>>
<p class="hint-line">Both hangers (product examples):</p>
<div class="lingerie-products">
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('black-lace-alt')" alt="black for Jenny">
<span class="lingerie-product-label">Black lace (new set)<span class="lingerie-product-tag">for $girlfriendName</span></span>
</div>
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('strappy-blue')" alt="strappy electric blue for Alessia">
<span class="lingerie-product-label">Strappy electric blue<span class="lingerie-product-tag">for $bestfriendName</span></span>
</div>
</div>
<p class="delayed">The same quiet music plays when you return to the boutique. You compare $bestfriendName's bright blue straps with $girlfriendName's black lace and check both sizes twice.</p>
<p class="hint-line">Cash: $<span><<= $money>></span> · both sets <strong>$75</strong></p>
<<if $money lt 75>>
<p class="delayed">You cannot cover the seventy-five-dollar total after agreeing to buy both sets.</p>
<<actor girlfriend>>
(text) Broke and locked is a look. Go work, then come back for the lace. 🙄
<</actor>>
<div class="continue-links">
[[Mall]]
[[Home]]
</div>
<<else>>
<span id="conv"></span>
<div id="options">
<<you-choice "Buy both and try not to react.">>
<<set $money -= 75>>
<<run setup.nudgeArousal(8)>>
<p class="delayed">You place both hangers on the counter and reach for your card. The clerk glances from one size to the other before opening two bags.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Two gifts? Someone's having a generous day.</span></div></div>
<<actor you>>
My girlfriend, and her... friend. It's complicated.
<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Uh-huh. Card when you're ready.</span></div></div>
<div class="delayed">[[Pay|Lingerie errand 2 done]]</div>
<</you-choice>>
<<you-choice "Say out loud: one for my girlfriend, one for her best friend.">>
<<set $money -= 75>>
<<run setup.nudgeArousal(12)>>
<p class="delayed">You explain who each set is for, quietly but clearly enough to be heard. The clerk pauses, then resumes folding the lace with careful professionalism.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">All right. I'll bag them separately. Have a nice evening.</span></div></div>
<<actor-thought you>>
Your ears burn beneath the warm lights as you wait for the card reader to approve the purchase.
<</actor-thought>>
<div class="delayed">[[Leave with both bags|Lingerie errand 2 done]]</div>
<</you-choice>>
</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<set $flags.lingerie2Done = true>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<div class="scene-panel compact">
<img class="hero-img centered delayed" @src="setup.lingerieURL('strappy-blue')" alt="strappy blue lingerie for Alessia">
<<actor bestfriend>>
(text) He actually bought MY size???
I would ask for proof, but I don't want his sad face on my camera roll.
Thanks for the free clothes, loser. 💅
<</actor>>
<<if $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>
(text) Drop off both bags and leave. $bestfriendName already knows you're paying. 😒
<</actor>>
<<else>>
<<actor girlfriend>>
(text) We might try them on together later. You're not invited to that part. 😘
(Pic for your little gallery. Loser.)
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<</if>>
<div class="continue-links">
[[Mall]]
[[Home]]
[[Phone gallery]]
</div>
</div>
<</nobr>><<nobr>>
<<if !setup.alphaRouteOpen() || !$flags.lingerie2Done || $flags.lingerie3Done>>
<div class="scene-panel compact"><p class="scene-lead">The boutique is closed to you right now.</p><div class="continue-links">[[Mall]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/mall.png'" alt="">
<<actor girlfriend>>
(text) this is the last one, so listen carefully.
buy the electric blue lace set in my size. then take the tiny emerald thong one size smaller into the fitting room and try it on.
send me a photo of the tag against your cage through the fabric, with no face in the shot.
at checkout, if they ask who the set is for, tell them, "for my bull, so he can fuck me in it."
say it word for word. i'll ask the clerk if i have to.
<</actor>>
<<actor-thought you>>
You have to buy her the electric blue set, squeeze into the emerald thong, and photograph it against the cage. Then you have to tell a stranger exactly who will enjoy the lingerie.
<</actor-thought>>
<p class="hint-line">What you have to buy (product examples):</p>
<div class="lingerie-products">
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('electric-blue')" alt="blue set for Jenny">
<span class="lingerie-product-label">Electric blue lace set<span class="lingerie-product-tag">her size · for him to ruin</span></span>
</div>
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('panty-emerald')" alt="emerald thong try-on">
<span class="lingerie-product-label">Emerald lace thong<span class="lingerie-product-tag">smaller · you try it on</span></span>
</div>
</div>
<p class="hint-line">Cash: $<span><<= $money>></span> · full order <strong>$55</strong></p>
<<if $money lt 55>>
<p class="delayed">You are fifty-five dollars short of carrying out the order she expects you to repeat word for word.</p>
<<actor girlfriend>>
(text) earn the money, then come back and say it. 🙄
<</actor>>
<div class="continue-links">
[[Mall]]
[[Home]]
</div>
<<else>>
<div class="continue-links">
[[Enter the boutique|Lingerie errand 3 fitting]]
</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/mall.png'" alt="">
<p class="delayed">You take the electric blue set and the tiny emerald thong into a fitting room. The thin curtain sways whenever someone walks past, and the quiet music does nothing to slow your pulse.</p>
<div class="lingerie-products">
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('panty-emerald')" alt="try-on thong">
<span class="lingerie-product-label">Emerald thong<span class="lingerie-product-tag">wrong size on purpose</span></span>
</div>
</div>
<<actor-thought you>>
You lower your jeans and hold the lace against the cage. Even behind the half-closed door, she expects photographic proof that you followed her order.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Try the smaller pair. Snap the tag-and-cage photo.">>
<<run setup.nudgeArousal(14)>>
<p class="delayed">The undersized lace stretches tightly over the cage. Your photo comes out blurry, but she reacts with a heart three seconds after you send it.</p>
<<actor girlfriend>>
(text) look at you squeezed into those. now pay and say the line. 😘
<</actor>>
<div class="delayed">[[Checkout|Lingerie errand 3 checkout]]</div>
<</you-choice>>
<<you-choice "Freeze. Almost bail.">>
<<actor girlfriend>>
(text) i still don't see a photo. either put them on or i'll tell $bestfriendName you chickened out of panties. your call. 😒
<</actor>>
<<run setup.nudgeArousal(10)>>
<p class="delayed">You put them on and send the photo. Your hands shake when you take the thong off and hang it back up. The shop stays quiet outside the curtain.</p>
<div class="delayed">[[Force yourself to checkout|Lingerie errand 3 checkout]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<p class="delayed">At the counter, the clerk places a soft bag beside the card reader and glances from the electric blue lace to your face.</p>
<div class="lingerie-products">
<div class="lingerie-product-card">
<img class="lingerie-product-img" @src="setup.lingerieURL('electric-blue')" alt="bag contents">
<span class="lingerie-product-label">In the bag<span class="lingerie-product-tag">for her bull</span></span>
</div>
</div>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Pretty color. Who's the lucky one?</span></div></div>
<<actor-thought you>>
She has already written your answer. You try to think of a lie while the clerk waits, but the words refuse to come.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "It's… for my girlfriend. For her bull. So he can fuck her in it.">>
<<set $money -= 55>>
<<run setup.peakArousal()>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Oh... all right. The card reader is ready whenever you are.</span></div></div>
<p class="delayed">The clerk does not laugh. Your confession hangs in the silence between you while they seal the bag and slide it across the counter.</p>
<<actor-thought you>>
You paid and said every word she demanded. $bullyName will see her in the lace, while you leave with the receipt and the cage still locked.
<</actor-thought>>
<div class="delayed">[[Leave with the bag|Lingerie errand 3 done]]</div>
<</you-choice>>
<<you-choice "Mumble: girlfriend. anniversary. (lie)">>
<<set $money -= 55>>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 2)>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Aww. Sweet. Have a good one.</span></div></div>
<p class="delayed">Your phone vibrates before you clear the doors. She already knows. Of course she does... she told you she'd check.</p>
<<actor girlfriend>>
(text) that wasn't the line. you paid, but you still failed.
say it out loud next time or don't expect me to be soft when you come home. 🙄
<</actor>>
<<actor-thought you>>
The lie spared you thirty seconds of embarrassment, but her message makes clear that she will remember it.
<</actor-thought>>
/* Still mark done, errand complete, but colder keyholder */
<div class="delayed">[[Go|Lingerie errand 3 done shame]]</div>
<</you-choice>>
<<you-choice "Voice cracking: for her bull, so he can fuck her in it.">>
<<set $money -= 55>>
<<run setup.peakArousal()>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'" alt=""><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Oh, wow. I heard you. You can use the card reader now.</span></div></div>
<p class="delayed">Your voice broke on <em>bull</em>. The clerk pretends the receipt printer is fascinating. You pretend your ears are not on fire.</p>
<<actor girlfriend>>
(text) i heard your voice crack from here. bring the bag home, and remember that the key stays with me. 😘
<</actor>>
<div class="delayed">[[Leave shaking|Lingerie errand 3 done]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.lingerie3Done = true>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<set $storyBeat = "lingerie-errands">>
<div class="scene-panel compact">
<p class="delayed">The mall corridor feels colder when you leave. The bag swings from your hand while you replay what you said to the clerk.</p>
<<actor girlfriend>>
(text) Leave the bag at my place and keep your phone on.
<</actor>>
<p class="delayed">Soon after you drop off the bag, a photo fills your lock screen without a caption.</p>
<img class="hero-img centered porn-frame" @src="setup.lingerieURL('jenny-kiss-bed')" alt="she wore what you bought">
<<if $girlfriendTrustLevel gte 7>>
<<actor girlfriend>>
(text) I'm wearing the electric blue set you paid for while he's warm against me and you're locked.
Say thank you, keyholder, if you still want to run my errands. 😈
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<elseif $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>
(text) You bought it for me, and he gets to enjoy it. Don't text me questions.
<</actor>>
<<else>>
<<actor girlfriend>>
(text) Look what your money bought. I'm wearing the same lace with my mouth on him.
Save that to your gallery. 😏
<</actor>>
<</if>>
<<run setup.peakArousal()>>
<<actor-thought you>>
You bought the outfit, and she is already wearing it while kissing $bullyName on the bed. The sight makes you swell painfully against the cage.
<</actor-thought>>
<div class="continue-links">
[[Mall]]
[[Home]]
[[Phone gallery]]
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.lingerie3Done = true>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<set $storyBeat = "lingerie-errands">>
<div class="scene-panel compact">
<p class="delayed">You still paid and carried the bag out, but the lie offers little comfort once her message arrives.</p>
<<actor girlfriend>>
(text) Your card worked, but you couldn't say one sentence for me.
Don't expect me to be nice after you changed the line.
<</actor>>
<p class="delayed">She sends the photo later to remind you who wore the set and who received her attention.</p>
<img class="hero-img centered porn-frame" @src="setup.lingerieURL('jenny-kiss-bed')" alt="she wore it for him anyway">
<<run setup.peakArousal()>>
<<actor-thought you>>
Next time, she will make you repeat the sentence more loudly and in front of someone whose reaction matters to her.
<</actor-thought>>
<div class="continue-links">
[[Mall]]
[[Home]]
</div>
</div>
<</nobr>><<nobr>>
<<silently>>
/* Six washroom situations on a rotating index with one anti-repeat re-roll. The fifth only
* exists once the class board is public knowledge and the player reads as beta on it, the
* sixth once the Velvet Rooms tour has made his evenings public, so the pool is four for most
* of Act I. */
<<set _wcMax = ($flags.classListLive && ($publicAlphaBeta || 0) gte 4) ? ($flags.nightlifeTourDone ? 6 : 5) : 4>>
<<set _wc = random(1, _wcMax)>>
<<if ($flags.mallWcLast || 0) eq _wc>>
<<set _wc = (_wc % _wcMax) + 1>>
<</if>>
<<set $flags.mallWcLast = _wc>>
<</silently>>
<img class="centered" @src="setup.ImagePath+'stores/men-toilet.png'">
<p class="delayed">
<<if _wc eq 1>>
You use the urinal, wash your hands, and leave before anyone starts a conversation.
<<elseif _wc eq 2>>
Two guys from your year are at the sinks, talking about the board. One reads the bottom of the list out loud and laughs at a name you do not catch. They nod at you on the way out.
<<elseif _wc eq 3>>
A man at the next urinal looks over once, then again, and lets himself be seen looking. You wash your hands faster than you need to.
<<elseif _wc eq 4>>
Someone is fixing his tie at the mirror and mentions the club on Friday like it is public knowledge. He leaves without waiting for an answer.
<<elseif _wc eq 5>>
A man at the sink asks whether the board by the escalator is real. You say it is. He reads your number back at you to check he heard it right, then dries his hands and leaves.
<<else>>
A man at the sink says he took the tour at the Velvet Rooms last weekend. He asks which of the rooms is worth the money and what the staff think of the guests who book them. You give him the answer you would give at the desk.
<</if>>
</p>
<<if _wc eq 3>>
<img class="delayed centered" @src="setup.ImagePath+'stores/men-toilet-piss.webp'">
<<if $caged>>
<<actor-thought you>>
He looked at your waistband on the second pass. You keep your hands at the sink and your eyes on the tiles.
<</actor-thought>>
<<else>>
<<actor-thought you>>
Nothing happened. You still check the corridor twice on the way out.
<</actor-thought>>
<</if>>
<<run setup.nudgeArousal(4)>>
<<elseif _wc eq 5>>
<img class="delayed centered" @src="setup.ImagePath+'stores/men-toilet-close.webp'">
<<actor-thought you>>
He said the number the way you would say a price. You stay at the sink until the door stops moving.
<</actor-thought>>
<<run setup.nudgeArousal(3)>>
<<elseif _wc eq 6>>
<img class="delayed centered" @src="setup.ImagePath+'stores/men-toilet-close.webp'">
<<actor-thought you>>
He did not ask whether you work there. He asked which room to book.
<</actor-thought>>
<<run setup.nudgeArousal(3)>>
<<elseif _wc eq 2 && $flags.classListLive>>
<<actor-thought you>>
They read the list out loud in a room with three people in it. You are one of the three.
<</actor-thought>>
<<run setup.nudgeArousal(3)>>
<<elseif _wc eq 4 && $flags.nightlifeFirstShiftDone>>
<<run setup.nudgeArousal(2)>>
<</if>>
<span class="delayed">[[Mall]]</span>
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'stores/xxx-store.webp'">
<p class="delayed">
Fluorescent lights wash over shelves of toys and bottles. The clerk watches the register while you browse without offering advice.
You have $$money with you.
</p>
<<if !$backpack.has('dildo')>>
<<if $money gte 50>>
<<link [[Dildo ($50), for when she keeps you locked|XXX-store]]>>
<<pickup $backpack "dildo" 1>>
<<set $money -= 50>>
<</link>>
<<else>>
Dildo ($50), not enough money
<</if>>
<<else>>
<em>You already own a dildo.</em>
<</if>>
<<if !$backpack.has('cage-lube')>>
<<if $money gte 15>>
<<link [[Cage-safe lube ($15)|XXX-store]]>>
<<pickup $backpack "cage-lube" 1>>
<<set $money -= 15>>
<</link>>
<<else>>
Cage-safe lube ($15), not enough money
<</if>>
<<else>>
<em>Lube is in your bag.</em>
<</if>>
<<if !$backpack.has('apology-gift')>>
<<if $money gte 30>>
<<link `"Nice gift for " + $girlfriendName + " ($30)"` "XXX-store buy gift">>
<<set $money -= 30>>
<</link>>
<<else>>
Nice gift for $girlfriendName ($30), not enough money
<</if>>
<<else>>
<em>The silver bracelet is wrapped in your bag for the next time you see her.</em>
<</if>>
<<if $caged && !$backpack.has('chastity-panty') && $money gte 20>>
<<link [[Soft panties that hide a cage ($20)|XXX-store]]>>
<<pickup $backpack "chastity-panty" 1>>
<<set $money -= 20>>
<</link>>
<<elseif $caged && !$backpack.has('chastity-panty')>>
Soft panties that hide a cage ($20), not enough money
<</if>>
<span>[[Mall]]</span>
<</nobr>><<nobr>>
<<pickup $backpack "apology-gift" 1>>
<p class="delayed">
You choose a slim silver bracelet and watch the clerk fold it into a small black box.
</p>
<<actor-thought you>>
If I give this to $girlfriendName, maybe she will consider unlocking me sooner. She might laugh and accept it without promising anything, but I have already spent the money.
<</actor-thought>>
<<if $caged>>
<<set $flags.giftForKeyholder = true>>
<</if>>
[[Back to store|XXX-store]]
<</nobr>><<nobr>>
<<if $flags.nightlifeContactDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-contact.webp'" alt="Mara waiting at the hotel desk">
<p class="scene-lead">The first conversation with Mara is already over.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-contact.webp'" alt="Mara waiting at the hotel desk after the shift">
<h2 class="scene-title">The guest who remembers</h2>
<p class="scene-lead">Your boss leaves with the cash drawer. The copper-haired woman from room 314 stays at the desk. You have checked her in three times, always with different luggage and the same burgundy coat.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">You remember room numbers and forget conversations. That is useful.<br>I manage privacy for a licensed adults-only venue. Everybody there is over eighteen, employed by choice, and paid properly. I am not offering you anything tonight.</span></div></div>
<<actor you>>Then why tell me?<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Because I have watched you avoid reading names from the guest screen out loud. Most new receptionists need to be corrected.<br>I wanted to know whether that was judgment or instinct.</span></div></div>
<span id="conv"></span>
<div id="options">
<<you-choice "Guest information stays at the desk.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Professional answer. Keep giving it when nobody is checking.</span></div></div>
<div class="delayed">[[Leave after her|Home][$flags.nightlifeContactDone = true; $flags.nightlifeContactStance = "professional"; $flags.nightlifeContactDayNum = $day; $flags.nightlifeContactShift = $workShiftsDone; _rep = setup.setNightlifeRep(0)]]</div>
<</you-choice>>
<<you-choice "That depends on what you expect me to hide.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Nothing illegal and nothing without consent. Suspicion is healthier than pretending you have no questions.</span></div></div>
<div class="delayed">[[Clock out and go home|Home][$flags.nightlifeContactDone = true; $flags.nightlifeContactStance = "cautious"; $flags.nightlifeContactDayNum = $day; $flags.nightlifeContactShift = $workShiftsDone; _rep = setup.setNightlifeRep(0)]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.nightlifeContactDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-discretion.webp'" alt="A sealed hotel laundry bag"><p class="scene-lead">There is no private errand without the earlier conversation.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<elseif $flags.nightlifeDiscretionOneDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-discretion.webp'" alt="The sealed bag ready for collection"><p class="scene-lead">The sealed bag has already left through the service entrance.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-discretion.webp'" alt="Mara placing a sealed laundry bag beside a hotel room door">
<h2 class="scene-title">One sealed bag</h2>
<p class="scene-lead">On your next shift, Mara leaves a black laundry bag behind the desk. It is zipped, numbered, and small enough to carry without attracting attention.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Room 314 signed a private-property release. The desk copy authorizes this handoff instead of housekeeping inventory.<br>Take it to the service entrance. Celia will show you the matching number. Do not open it.</span></div></div>
<<actor-thought you>>
The bag could contain clothes, toys, cash, or nothing interesting. The sealed zip makes guessing feel more invasive than carrying it.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Match the number and hand it over sealed.">>
<p class="delayed">Celia shows you the matching card. You pass her the unopened bag and watch her place it inside a plain case.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">No questions and no improvising. That is exactly what I asked for.</span></div></div>
<div class="delayed">[[Finish the shift|Home][$flags.nightlifeDiscretionOneDone = true; $flags.nightlifeDiscretionOneStance = "sealed"; $flags.nightlifeDiscretionOneDayNum = $day; $flags.nightlifeDiscretionOneShift = $workShiftsDone; _rep = setup.setNightlifeRep(1)]]</div>
<</you-choice>>
<<you-choice "Ask Mara to confirm what kind of property it is.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Wardrobe and personal equipment, all legal. You were right to ask me instead of opening it.</span></div></div>
<p class="delayed">Celia matches the number and takes the sealed bag at the service entrance.</p>
<div class="delayed">[[Finish the shift|Home][$flags.nightlifeDiscretionOneDone = true; $flags.nightlifeDiscretionOneStance = "verified"; $flags.nightlifeDiscretionOneDayNum = $day; $flags.nightlifeDiscretionOneShift = $workShiftsDone; _rep = setup.setNightlifeRep(1)]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.nightlifeDiscretionOneDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-complaint.webp'" alt="A quiet hotel corridor"><p class="scene-lead">Mara has no reason to trust you with the complaint yet.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<elseif $flags.nightlifeDiscretionTwoDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-complaint.webp'" alt="The quiet hotel corridor after a complaint"><p class="scene-lead">The hallway complaint has already been settled without exposing the guests.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-complaint.webp'" alt="The MC speaking quietly with an angry adult hotel guest in the corridor">
<h2 class="scene-title">Keep the room number quiet</h2>
<p class="scene-lead">On a later shift, a guest storms into the lobby and starts describing the couple next door loudly enough for three people to hear. Mara watches from the lift without stepping in.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Solve the noise complaint. Do not repeat either room number and do not tell him who booked the other room.</span></div></div>
<span id="conv"></span>
<div id="options">
<<you-choice "Move the complaint behind the office door.">>
<p class="delayed">You interrupt before he repeats the number, guide him into the empty office, and offer a room change. His voice drops once the lobby is no longer watching.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">You controlled the space without humiliating him. That is harder than sounding tough.</span></div></div>
<div class="delayed">[[Close the desk|Home][$flags.nightlifeDiscretionTwoDone = true; $flags.nightlifeDiscretionTwoStance = "redirected"; $flags.nightlifeDiscretionTwoDayNum = $day; $flags.nightlifeDiscretionTwoShift = $workShiftsDone; _rep = setup.setNightlifeRep(1)]]</div>
<</you-choice>>
<<you-choice "Let him vent, but stop every identifying detail.">>
<p class="delayed">He complains for five full minutes. Each time he reaches for a name or room number, you cut in and return him to the noise itself.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Patient, private, and unpleasant. Most real service work is at least two of those.</span></div></div>
<div class="delayed">[[Close the desk|Home][$flags.nightlifeDiscretionTwoDone = true; $flags.nightlifeDiscretionTwoStance = "absorbed"; $flags.nightlifeDiscretionTwoDayNum = $day; $flags.nightlifeDiscretionTwoShift = $workShiftsDone; _rep = setup.setNightlifeRep(1)]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeParkReady() && !$flags.nightlifeParkDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/park-conversation.webp'" alt="Mara waiting near the park gate"><p class="scene-lead">Mara is not ready to discuss her other workplace yet.</p><div class="continue-links">[[Return to the park|Park]]</div></div>
<<elseif $flags.nightlifeParkDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/park-conversation.webp'" alt="Mara near the park gate"><p class="scene-lead">You already heard what the Velvet Rooms are. No offer has been made yet.</p><div class="continue-links">[[Return to the park|Park]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/park-conversation.webp'" alt="Mara explaining the Velvet Rooms during a daytime park meeting">
<h2 class="scene-title">Daylight explanation</h2>
<p class="scene-lead">Mara meets you by the north gate in daylight, away from hotel guests and security cameras. She carries coffee instead of luggage.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">The hotel desk is not the place for this conversation. Guests pass through it, your manager owns the floor, and I do not recruit people while they are clocked in.</span></div></div>
<p class="delayed">She gives you one of the coffees and takes the seat beside you instead of standing back to observe another hotel problem.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">The Velvet Rooms are a legal adult venue. Private suites, bar service, reception, cleaning, security, and consensual sex work. Nobody is assigned sexual contact.<br>You handled two ordinary privacy problems well. That is why I am explaining it. I am still not hiring you today.</span></div></div>
<<actor you>>What would you hire me to do?<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">That depends on what you choose when there is a real offer. Operations, floor service, or a flexible trial. Your school rank does not choose for you.</span></div></div>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">One unrelated favor: a client may have left a sealed envelope behind the broken dryer here. Returning it is optional and has nothing to do with whether I offer you work.</span></div></div>
<span id="conv"></span>
<div id="options">
<<you-choice "My limits stay mine, even if I take the job.">>
<<run setup.completeNightlifePark("control")>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Correct. If a manager dislikes that sentence, leave her workplace.</span></div></div>
<div class="delayed">[[Finish the coffee|Park]]</div>
<</you-choice>>
<<you-choice "I can listen before deciding.">>
<<run setup.completeNightlifePark("pragmatic")>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">That is all I asked for. Go home and let the idea become less dramatic.</span></div></div>
<div class="delayed">[[Finish the coffee|Park]]</div>
<</you-choice>>
<<identity-choice devotion "Tell me what being useful there could mean.">>
<<run setup.completeNightlifePark("service", "nightlife-park-service")>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Carrying trays, preparing rooms, listening carefully, and sometimes being seen doing it. Useful does not mean available for everything.</span></div></div>
<div class="delayed">[[Finish the coffee|Park]]</div>
<</identity-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeParkWcReady()>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/park-wc-envelope.webp'" alt="An empty park washroom"><p class="scene-lead">There is no envelope waiting behind the dryer.</p><div class="continue-links">[[Return to the park|Park]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/park-wc-envelope.webp'" alt="The MC finding a sealed envelope behind a broken hand dryer">
<h2 class="scene-title">Not part of the offer</h2>
<p class="scene-lead">The park washroom smells of bleach and damp concrete. Behind the broken dryer, you find a sealed envelope marked with a room-card number.</p>
<<actor-thought you>>
Mara mentioned that an embarrassed client might have hidden something here. She also said retrieving it was optional and would not decide whether she hired you.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll take it sealed and leave it at the hotel desk.">>
<p class="delayed">You wash your hands, carry the envelope outside, and lock it in the hotel drop safe on the way back. Mara sends a ten-dollar tip. She does not ask what was inside.</p>
<div class="delayed">[[Leave the washroom|Park][$flags.nightlifeParkWcDone = true; $flags.nightlifeParkWcStance = "returned"; $money += 10]]</div>
<</you-choice>>
<<you-choice "I'm leaving it here. This isn't my responsibility.">>
<p class="delayed">You press the tape back into place and leave. The decision follows you only as far as the park gate.</p>
<div class="delayed">[[Leave the washroom|Park][$flags.nightlifeParkWcDone = true; $flags.nightlifeParkWcStance = "left" ]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.nightlifeParkDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-offer.webp'" alt="Mara holding a plain appointment card"><p class="scene-lead">Mara does not make the offer before the park conversation.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<elseif $flags.nightlifeOfferDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-offer.webp'" alt="The Velvet Rooms appointment card"><p class="scene-lead">The appointment card is already in your pocket.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/hotel-offer.webp'" alt="Mara giving the MC a plain appointment card after another hotel shift">
<h2 class="scene-title">A real offer</h2>
<p class="scene-lead">On a later shift, Mara waits until you clock out, then slides a plain appointment card across the hotel desk.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">This is a paid twenty-dollar tour, not a contract. You can refuse it now or leave after seeing the venue.<br>If you continue, what kind of trial should I prepare?</span></div></div>
<span id="conv"></span>
<div id="options">
<<you-choice "Operations. Reception, privacy, and handling problems.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Operations trial. You will still see what the venue is, but nobody gets to turn your job title into consent.</span></div></div>
<div class="delayed">[[Take the appointment card|Home][$flags.nightlifeOfferDone = true; $flags.nightlifeRole = "operations"; $flags.nightlifeOfferDayNum = $day; _rep = setup.setNightlifeRep(3)]]</div>
<</you-choice>>
<<you-choice "Flexible. Let me see the floor before I specialize.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Flexible trial, with every task named before you accept it. That gives you information without giving me a blank check.</span></div></div>
<div class="delayed">[[Take the appointment card|Home][$flags.nightlifeOfferDone = true; $flags.nightlifeRole = "flexible"; $flags.nightlifeOfferDayNum = $day; _rep = setup.setNightlifeRep(3)]]</div>
<</you-choice>>
<<you-choice "Floor service. I want to know what that role feels like.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Floor service means drinks, robes, room preparation, and following precise requests. Sexual contact remains a separate choice, never an implied duty.</span></div></div>
<div class="delayed">[[Take the appointment card|Home][$flags.nightlifeOfferDone = true; $flags.nightlifeRole = "service"; $flags.nightlifeOfferDayNum = $day; _rep = setup.setNightlifeRep(3)]]</div>
<</you-choice>>
<<you-choice "Not now. I'm not accepting the tour.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Then keep the card or throw it away. I will not turn a private conversation into a debt.</span></div></div>
<div class="delayed">[[Leave after your shift|Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeTourReady() && !$flags.nightlifeTourDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="The closed entrance of the Velvet Rooms"><p class="scene-lead">The appointment is for a later day.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<elseif $flags.nightlifeTourDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="The reception lounge inside the Velvet Rooms"><p class="scene-lead"><<if $flags.nightlifeTrialAccepted is false>>You completed the paid tour and declined the trial shift.<<else>>You completed the tour and recorded your boundary for the trial.<</if>></p><div class="continue-links">[[Go home|Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="Mara guiding the MC through the elegant reception lounge of the Velvet Rooms">
<h2 class="scene-title">The Velvet Rooms</h2>
<p class="scene-lead">The address leads to a renovated townhouse with frosted windows and no name beside the bell. Mara meets you at the outer door, checks the appointment card, and lets you in herself.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">This room is reception. Nothing past the locked door is visible from the street, and nobody enters the corridor until reception confirms who they came to see.<br>Stay beside me for now. Watch how people work before you decide whether you belong here.</span></div></div>
<p class="delayed">An elegant lounge separates the front door from the rest of the building. The receptionist turns her tablet away before greeting a guest by his chosen name. Beyond the inner door, a cleaner knocks, waits for an answer, and only then wheels fresh linen into a suite.</p>
<p class="delayed">Mara introduces the people on duty one at a time. Each gives you the name they want used and wears a different role badge.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Red badge is security, black is operations, silver is floor service, and burgundy marks an independent provider. A badge describes work. It never replaces a yes.<br>Your trial is <<= $flags.nightlifeRole || "flexible" >>. Give me one boundary to put on the briefing sheet.</span></div></div>
<span id="conv"></span>
<div id="options">
<<you-choice "No client touches me during the trial.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">No client contact. Staff may still ask before adjusting your uniform or demonstrating equipment.</span></div></div>
<div class="delayed">[[Finish the paid tour|Home][$flags.nightlifeTourDone = true; $flags.nightlifeTrialAccepted = true; $flags.nightlifeTourBoundary = "no-client-touch"; $flags.nightlifeTourDayNum = $day; $money += 20; _rep = setup.setNightlifeRep(4)]]</div>
<</you-choice>>
<<you-choice "Verbal instructions are fine. Physical tasks need a separate yes.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Recorded exactly that way. Nobody may treat silence as agreement.</span></div></div>
<div class="delayed">[[Finish the paid tour|Home][$flags.nightlifeTourDone = true; $flags.nightlifeTrialAccepted = true; $flags.nightlifeTourBoundary = "separate-yes"; $flags.nightlifeTourDayNum = $day; $money += 20; _rep = setup.setNightlifeRep(4)]]</div>
<</you-choice>>
<<you-choice "Keep the first shift fully nonsexual.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Nonsexual first shift. There is enough real work to evaluate you without manufacturing a test.</span></div></div>
<div class="delayed">[[Finish the paid tour|Home][$flags.nightlifeTourDone = true; $flags.nightlifeTrialAccepted = true; $flags.nightlifeTourBoundary = "nonsexual"; $flags.nightlifeTourDayNum = $day; $money += 20; _rep = setup.setNightlifeRep(4)]]</div>
<</you-choice>>
<<you-choice "The tour is enough. I don't want a trial shift.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Then the tour ends here. You still get the twenty dollars, and I do not schedule you.</span></div></div>
<div class="delayed">[[Leave after the paid tour|Home][$flags.nightlifeTourDone = true; $flags.nightlifeTrialAccepted = false; $flags.nightlifeTourBoundary = "declined"; $flags.nightlifeTourDayNum = $day; $money += 20; _rep = setup.setNightlifeRep(4)]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if $flags.nightlifeTourDone && $flags.nightlifeTrialAccepted is false>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="The Velvet Rooms reception desk"><p class="scene-lead">You declined the trial after the paid tour. Mara did not schedule a shift.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<elseif !setup.nightlifeFirstShiftReady() && !$flags.nightlifeFirstShiftDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="The prepared Velvet Rooms reception desk"><p class="scene-lead">Your trial shift is scheduled for a later evening.</p><div class="continue-links">[[Go home|Home]]</div></div>
<<elseif $flags.nightlifeFirstShiftDone>>
<div class="scene-panel compact"><img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="The Velvet Rooms after the first shift"><p class="scene-lead">Your first Velvet shift is complete. The lounge keeps evening shifts open for you.</p><div class="continue-links">[[Take the evening roster|Nightlife Velvet Hub]] [[Go home|Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="The adult MC working his first evening shift at the Velvet Rooms">
<h2 class="scene-title">First shift</h2>
<<if $flags.nightlifeRole eq "operations">>
<p class="scene-lead">Mara places you behind reception. You verify appointments, keep legal names off the waiting-room screen, and quietly refuse entry to a drunk man who cannot follow the house rules.</p>
<<elseif $flags.nightlifeRole eq "service">>
<p class="scene-lead">Mara gives you a silver floor-service badge. You prepare clean robes, carry drinks, and kneel once to fasten a guest's shoe after she asks and you agree. Nobody turns the gesture into permission for more.</p>
<<else>>
<p class="scene-lead">Your flexible trial moves between reception and the floor. You verify an appointment, help redirect the drunk guest at the door, then prepare one suite and deliver sealed supplies.</p>
<</if>>
<<if $flags.nightlifeTourBoundary eq "no-client-touch">>
<p class="delayed">Your briefing sheet says <strong>no client contact</strong>. Mara redirects one guest before he reaches for your badge, and the rest of the shift stays hands-off.</p>
<<elseif $flags.nightlifeTourBoundary eq "separate-yes">>
<p class="delayed">Before every physical task, Mara names it and waits. You accept the work you chose and nobody treats the next task as automatic.</p>
<<else>>
<p class="delayed">The first shift stays fully nonsexual, exactly as recorded. Mara evaluates the work without manufacturing a test.</p>
<</if>>
<p class="delayed">Near closing, a student from a neighboring program recognizes you at the desk. He glances at the temporary badge, then at the optional legal-name field on Mara's tablet.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">He already saw you working. What becomes public is still your decision.<br>Legal-name badges sync their role to the licensed ANWO work directory. An alias stays inside this building.</span></div></div>
<span id="conv"></span>
<div id="options">
<<if $flags.nightlifeRole eq "operations" || $flags.nightlifeRole eq "flexible">>
<<you-choice "Use my legal name. List me under operations.">>
<<run setup.applyRecognition("nightlife-first-operations")>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Operations assistant, verified. The directory records that you handled privacy and refused an unsafe guest.</span></div></div>
<<set _pay = setup.completeNightlifeFirstShift("public-operations", 45)>>
<p class="delayed">Mara pays you <strong>$<<= _pay >></strong>. Your public work record updates before you leave.</p>
<div class="delayed">[[Go home after closing|Home]]</div>
<</you-choice>>
<</if>>
<<if $flags.nightlifeRole eq "service" || $flags.nightlifeRole eq "flexible">>
<<you-choice "Use my legal name. List the service work honestly.">>
<<run setup.applyRecognition("nightlife-first-service")>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Floor service, verified. It says you followed instructions and maintained boundaries. Nothing more.</span></div></div>
<<set _pay = setup.completeNightlifeFirstShift("public-service", 45)>>
<p class="delayed">Mara pays you <strong>$<<= _pay >></strong>. The service role becomes part of your public record.</p>
<div class="delayed">[[Go home after closing|Home]]</div>
<</you-choice>>
<</if>>
<<you-choice "Use an alias. Keep this job inside the building.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Private alias recorded. The student may gossip about seeing you, but the venue confirms nothing.</span></div></div>
<<set _pay = setup.completeNightlifeFirstShift("private-alias", 45)>>
<p class="delayed">Mara pays you <strong>$<<= _pay >></strong>. Your public score remains unchanged.</p>
<div class="delayed">[[Go home after closing|Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.nightlifeFirstShiftDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="The Velvet Rooms reception desk">
<p class="scene-lead">Mara leaves no roster for someone who has not worked a first shift.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<elseif $flags.nightlifeRosterNoteDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="The folded evening roster">
<p class="scene-lead">The roster note is already folded in your wallet.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/first-shift.webp'" alt="A folded evening roster note left at the hotel desk">
<h2 class="scene-title">The evening roster</h2>
<p class="scene-lead">After clocking out at the hotel, you find a folded note under the keyboard. The handwriting is short and exact, unmistakably Mara's.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">The Velvet Rooms keeps evening shifts open for you. Reception books you in on the nights you choose, at least a rest day apart.<br>Guests book through the same desk. You have seen enough of the floor to know what that means.</span></div></div>
<<actor-thought you>>
Two doors in one building. One pays me to carry the trays. The other one charges me to sit down. I am not sure which one she thinks I will use.
<</actor-thought>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">The lounge knows your face now. Ask for your badge at reception when you want the evening roster.</span></div></div>
<p class="delayed">You fold the note once and put it in your wallet beside Mara's card.</p>
<div class="continue-links">[[Take the roster note and go home|Home][$flags.nightlifeRosterNoteDone = true]]</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeVelvetHubReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="The frosted entrance of the Velvet Rooms">
<p class="scene-lead">You do not know this address yet.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<elseif $gameDate.getHours() lt 18>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-hub.webp'" alt="The closed Velvet Rooms lounge in daylight">
<p class="scene-lead">The frosted door is locked. The lounge opens at six in the evening.</p>
<div class="continue-links">[[Go home|Home]] [[Park]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'story/nightlife/velvet-hub.webp'" alt="The warm evening lounge of the Velvet Rooms with reception in the back">
<h2 class="scene-title">The Velvet Rooms</h2>
<p class="scene-lead">The townhouse glows low and warm behind its frosted windows. Reception greets you by your chosen name, and the corridor hums behind the inner door. Your <<if $flags.nightlifeRole eq "operations">>black operations badge<<elseif $flags.nightlifeRole eq "service">>silver floor-service badge<<else>>flexible trial badge<</if>> waits in the tray whenever you work.</p>
<p class="hint-line">Reputation <<= setup.nightlifeRep()>>/8 · <<= setup.nightlifeProgressLabel()>> · Velvet shifts: $nightlifeShiftsDone<<if $flags.nightlifeGuestVisits gt 0>> · guest visits: $flags.nightlifeGuestVisits<</if>></p>
<<if !$flags.nightlifeStanceBeatDone && ($nightlifeShiftsDone gte 2 || $flags.nightlifeGuestVisits gte 1)>>
<div class="quest-banner">
<strong>A sealed note at reception</strong>
<p>The envelope has your chosen name on it and no sender. Reception says it arrived this afternoon.</p>
[[Read the sealed note|Nightlife Velvet Echo]]
</div>
<</if>>
<<if setup.velvetEventUnseen()>>
<div class="quest-banner">
<strong>Tonight: <<= setup.velvetEvent().name >></strong>
<p><<= setup.velvetEvent().hubLine >></p>
<img class="hero-img centered" @src="setup.ImagePath + setup.velvetEvent().still" alt="The lounge laid out for tonight's event">
</div>
<<run setup.markVelvetEventSeen()>>
<</if>>
<div class="hub-actions">
[[Work an evening shift|Nightlife Velvet Shift]]
<<if setup.nightlifeGuestReady()>><<link "Book a guest session" "Nightlife Velvet Guest">><</link>><</if>>
<<link "Talk to Mara about the briefing sheet" "Nightlife Velvet Boundary">><</link>>
[[Go home|Home]]
</div>
<<if !setup.nightlifeVelvetShiftReady()>>
<p class="hint-line">Mara keeps at least one rest day between your shifts.<<if setup.nightlifeVelvetShiftWait() gt 0>> Next shift in <<= setup.nightlifeVelvetShiftWait() >> day(s).<</if>></p>
<</if>>
<<if !setup.nightlifeGuestReady()>>
<p class="hint-line">Reception has you booked for one room tonight already.</p>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeVelvetHubReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-tour.webp'" alt="The Velvet Rooms reception lounge">
<p class="scene-lead">There is no briefing sheet without a first shift.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-hub.webp'" alt="Mara at reception holding the laminated briefing sheet">
<h2 class="scene-title">The briefing sheet</h2>
<p class="scene-lead">Mara turns the laminated sheet around on the counter. One line is yours to change, and she waits until you have read it twice.</p>
<p class="hint-line">Current entry: <<if $flags.nightlifeTourBoundary eq "no-client-touch">>No client contact.<<elseif $flags.nightlifeTourBoundary eq "separate-yes">>Physical tasks need a separate yes.<<else>>Fully nonsexual duties.<</if>></p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Boundaries are staff equipment, same as the badge. You can keep the sheet as it is or move the line. Say the words and I write them down.<br>Nobody is graded on where the line sits. People are graded on whether they mean it.</span></div></div>
<span id="conv"></span>
<div id="options">
<<if $flags.nightlifeTourBoundary neq "no-client-touch">>
<<you-choice "No client contact. Guests keep their distance.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Recorded. Staff will still ask before adjusting your uniform. Guests will not be invited to touch you.</span></div></div>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub][$flags.nightlifeTourBoundary = "no-client-touch"]]</div>
<</you-choice>>
<</if>>
<<if $flags.nightlifeTourBoundary neq "separate-yes">>
<<you-choice "Verbal tasks are fine. Anything physical needs a separate yes.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Recorded exactly that way. Nobody may treat silence as agreement, including me.</span></div></div>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub][$flags.nightlifeTourBoundary = "separate-yes"]]</div>
<</you-choice>>
<</if>>
<<if $flags.nightlifeTourBoundary neq "nonsexual">>
<<you-choice "Keep the duties fully nonsexual for now.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Recorded. There is enough real work here without manufacturing tests.</span></div></div>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub][$flags.nightlifeTourBoundary = "nonsexual"]]</div>
<</you-choice>>
<</if>>
<<you-choice "The sheet stays as it is.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Then it stays. Come back whenever the sentence changes.</span></div></div>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeVelvetShiftReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-shift.webp'" alt="The Velvet Rooms staff corridor">
<p class="scene-lead"><<if !setup.nightlifeVelvetHubReady()>>Mara has not scheduled you yet.<<else>>Mara keeps at least one rest day between your shifts.<<if setup.nightlifeVelvetShiftWait() gt 0>> Next shift in <<= setup.nightlifeVelvetShiftWait() >> day(s).<</if>><</if>></p>
<div class="continue-links">[[Go home|Home]]<<if setup.nightlifeVelvetHubReady()>> [[Back to the lounge|Nightlife Velvet Hub]]<</if>></div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-shift.webp'" alt="The adult MC working an evening shift through the Velvet Rooms corridor">
<h2 class="scene-title">Evening shift</h2>
<<silently>>
<<set _beat = random(1, 6)>>
<<if ($flags.nightlifeLastShiftBeat || 0) eq _beat>>
<<set _beat = (_beat % 6) + 1>>
<</if>>
<<set $flags.nightlifeLastShiftBeat = _beat>>
<<set _event = setup.velvetEvent()>>
<</silently>>
<<if $flags.nightlifeRole eq "operations">>
<p class="scene-lead">You take the black badge and the reception tablet. Appointments are verified, legal names stay off the waiting screen, and one guest learns the house rules the polite way before he is walked back out.</p>
<<if _beat eq 1>>
<p class="delayed">Through the inner door you hear a locked suite. You log a maintenance ticket and keep your eyes on the tablet.</p>
<<elseif _beat eq 2>>
<p class="delayed">A guest tries to put his real name on the waiting screen. You wipe it and send him the house rules instead.</p>
<<elseif _beat eq 3>>
<p class="delayed">Two bookings overlap. You hold one couple in the lounge and walk the other down the corridor. Nobody yells. That is the job.</p>
<<elseif _beat eq 4>>
<p class="delayed">A provider drops her key card on the desk and asks to be logged out. Her name is not on the register for tonight. You hand the card back without writing anything.</p>
<<elseif _beat eq 5>>
<p class="delayed">The duty lead leaves a list of names on the desk to check against the door log. One of them belongs to a regular who always arrives alone. You tick the box and the corridor stays boring.</p>
<<else>>
<p class="delayed">Suite four calls the desk to complain about noise. Suite four is empty. You walk down, listen at the door, hear nothing, and log the call as checked.</p>
<</if>>
<<elseif $flags.nightlifeRole eq "service">>
<p class="scene-lead">You take the silver badge and the tray. Robes go out warm, drinks go out steady, and a provider asks for two quiet minutes before her next booking. You stand at the door for both of them.</p>
<<if _beat eq 1>>
<p class="delayed">You pass an open suite. A guest is on her knees in front of her partner. She sees you looking and winks. You keep walking with the tray.</p>
<<elseif _beat eq 2>>
<p class="delayed">A provider asks you to wait outside with a robe. The door is not fully shut. You hear her guest finish. You look at the wall until she takes the robe.</p>
<<elseif _beat eq 3>>
<p class="delayed">You take drinks to the viewing corridor. The glass wall is right there. You look. Then you look away. Then you look again.</p> /* prose-ok: three looks in a row are the beat */
<<elseif _beat eq 4>>
<p class="delayed">A guest at the end suite takes the wine bottle at the door, folds a note into your hand, and closes it in your face. The note is worth more than the hour you just worked.</p>
<<elseif _beat eq 5>>
<p class="delayed">A provider stops you in the corridor to hold her drink while she fixes an earring. Behind her the door is open enough to hear a man being told to wait. You hold the drink and look straight ahead.</p>
<<else>>
<p class="delayed">You refill the lounge carafe twice because nobody drinks the second round. From the far sofa you watch one guest kneel on a cushion and stay there for the length of a song.</p>
<</if>>
<<else>>
<p class="scene-lead">Your flexible badge splits the evening. One hour at reception checking in regulars, one hour on the floor ferrying sealed supplies, and one hour resetting a suite while the guests are still finishing their drinks elsewhere.</p>
<<if _beat eq 1>>
<p class="delayed">The suite has two glasses, a folded blindfold, and marks on a chalkboard. You stack the glasses and change the sheets. You do not count the marks.</p>
<<elseif _beat eq 2>>
<p class="delayed">You reset a room after a keyholder session. A small lock sits on the table. You put it in the drawer and do not ask.</p>
<<elseif _beat eq 3>>
<p class="delayed">At reception someone asks if you take guest bookings too. You say you work here. They smile like that was the interesting answer.</p>
<<elseif _beat eq 4>>
<p class="delayed">You vacuum the viewing corridor with the glass wall on your left. Twice the vacuum pulls you past the same window, and the second time you are slower about it.</p>
<<elseif _beat eq 5>>
<p class="delayed">A guest asks where the bathrobes are kept. You show him the shelf, and he asks whether the rooms come with company. You answer the way the staff sheet answers it.</p>
<<else>>
<p class="delayed">You reset the pair suite while the couple showers. Damp towels, two glasses, and a riding crop left on the chair in plain sight. You hang it by the wardrobe where it belongs.</p>
<</if>>
<</if>>
<<if _event>>
<p class="delayed"><<= _event.shiftLead >></p>
<p class="delayed"><<= _event.guestTwist >></p>
<</if>>
<<if $flags.nightlifeTourBoundary eq "no-client-touch">>
<p class="delayed">A guest reaches for your badge. Security gets there first. <strong>No client contact</strong> stays on your sheet.</p>
<<elseif $flags.nightlifeTourBoundary eq "separate-yes">>
<p class="delayed">Before every physical task, the duty lead names it and waits. You hand over one sealed case, refuse one corridor errand, and agree to one fitting check. <strong>A separate yes</strong>, every time.</p>
<<else>>
<p class="delayed">Your sheet keeps the night <strong>fully nonsexual</strong>. The interesting doors stay closed. Mara logs the evening and does not invent extra tests.</p>
<</if>>
<<if $caged>>
<p class="delayed">The cage sits tight under your staff trousers. By the second hour it is the loudest thing in the building that nobody can hear.</p>
<</if>>
<span id="conv"></span>
<div id="options">
<<you-action "Extra task after closing · $50 · 5h">>
<<if $flags.nightlifeRole eq "operations">>
<p class="delayed">Closing means walking the corridor and locking empty suites. Behind the last occupied door a woman laughs and the bed keeps time. You lock the empty ones and leave.</p>
<<elseif $flags.nightlifeRole eq "service">>
<p class="delayed">The extra task is a late tray run to the pair suite. You knock, wait, and get waved in. She is wearing a lot less than the robe on the chair. You set the tray down, say good night, and walk out at a normal speed.</p>
<<else>>
<p class="delayed">The extra task is resetting the lounge after a late booking. Cushions, curtains, and one pair of cuffs that go in the lost-property drawer. You finish with the lights half down.</p>
<</if>>
<<if $caged>><<run setup.nudgeArousal(10)>><<else>><<run setup.nudgeArousal(6)>><</if>>
<<set _pay = setup.completeNightlifeShift(true)>>
<p class="delayed">Mara pays you <strong>$<<= _pay >></strong> at the service exit. "The extra hour pays extra. Same rules as the rest of it."</p>
<div class="delayed">[[Clock out and go home|Nightlife Velvet Hub]]</div>
<</you-action>>
<<you-action "Clock out on time · $40 · 4h">>
<<set _pay = setup.completeNightlifeShift(false)>>
<<run setup.nudgeArousal(4)>>
<p class="delayed">Mara pays you <strong>$<<= _pay >></strong> and notes the roster down to the minute. "Clean shift. The extra task will still exist next time."</p>
<div class="delayed">[[Clock out and go home|Nightlife Velvet Hub]]</div>
<</you-action>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeVelvetHubReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The guest booking desk at the Velvet Rooms">
<p class="scene-lead">You are not a guest here yet.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<elseif !setup.nightlifeGuestReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The guest booking desk at the Velvet Rooms">
<p class="scene-lead">Reception has you booked for one room tonight already. One booking per evening, house rule.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The burgundy-lit guest booking desk at the Velvet Rooms">
<h2 class="scene-title">Booking as a guest</h2>
<p class="scene-lead">The guest desk sits at the edge of the lounge, discreet and burgundy-lit. The receptionist turns the booking screen toward you: three doors, three prices, and no obligation to pick any of them tonight.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">One room per evening. Every room is described before you pay, providers set their own limits, and any room stops the second you say stop.<br>Your badge and your wallet are different doors. Never confuse them in one night.</span></div></div>
/* The week's event night reaches the desk too, so a booking sits inside tonight's programme. */
<<set _event = setup.velvetEvent()>>
<<if _event.deskLine>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content"><<= _event.deskLine >></span></div></div>
<</if>>
<<if $flags.nightlifeJennyKnows>>
<p class="delayed">A folded card waits with your name on it. $girlfriendName's handwriting, one line: <em>"Book something honest. I want the whole story after. 💋"</em></p>
<</if>>
<<if ($flags.nightlifeGuestVisits || 0) gte 3>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">Three bookings in, and you still read the room list twice before you choose.<br>The ones who last stop doing that. Pick a door.</span></div></div>
<</if>>
<div class="hub-actions">
<span class="hub-action-cost">[[Book the viewing room · $20|Nightlife Velvet Guest Viewing]]</span>
<span class="hub-action-cost">[[Book a keyholder session · $35|Nightlife Velvet Guest Keyholder]]</span>
<<if setup.nightlifeRep() gte 7>>
<span class="hub-action-cost">[[Book the premium pair suite · $50|Nightlife Velvet Guest Premium]]</span>
<<else>>
<span class="hub-action-cost money-short">Premium pair suite · $50 · Requires reputation 7 (current <<= setup.nightlifeRep()>>)</span>
<</if>>
[[Not tonight|Nightlife Velvet Hub]]
</div>
<p class="hint-line">Wallet: $<<= $money >> · reception books one room per evening. Reputation rises through completed Velvet shifts.</p>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeGuestReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The guest booking desk at the Velvet Rooms">
<p class="scene-lead">Reception already booked you a room tonight. One booking per evening.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<elseif $money lt 20>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The viewing room corridor">
<p class="scene-lead">The viewing room costs $20 and your wallet says otherwise.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img porn-frame" @src="setup.velvetGuestMedia('viewing')" alt="">
<h2 class="scene-title">The viewing room</h2>
<<run setup.completeNightlifeGuestVisit("viewing")>>
<p class="scene-lead">The booth is small and dark. One wall is glass. The couple on the other side cannot see through it. They know you are there anyway. That is part of what they paid for.</p>
<<if ($flags.nightlifeGuestVisits || 0) lte 1>>
<p class="delayed">Reception wrote <em>viewing only</em> on the slip and read it back to you twice. First booking, first booth, and the glass does not care either way.</p>
<<else>>
<p class="delayed">Reception has stopped explaining the booth. Same door, same glass, and the couple on the other side started without waiting for you.</p>
<</if>>
<p class="delayed">She strips him slow. She talks to the glass like you are in the room. He does what she says. When she sits on him she looks at the glass, not at his face.</p>
<<if $caged>>
<<run setup.nudgeArousal(22)>>
<p class="delayed">Every time they change position the cage pulls against your pants. You watch to the end. They finish. You walk out still locked.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<<else>>
<span id="conv"></span>
<div id="options">
<<you-choice "Finish in the booth like a paying guest.">>
<<set $aroused = 0>>
<p class="delayed">You jerk off in the booth while they finish. You clean up, fix your clothes, and step into the corridor twenty dollars lighter.</p>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
<<you-choice "Hold it and walk out with the ache.">>
<<run setup.nudgeArousal(14)>>
<p class="delayed">You keep your hands on the armrests. The couple finishes without you. Walking out like that costs more than the twenty.</p>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeGuestReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The guest booking desk at the Velvet Rooms">
<p class="scene-lead">Reception already booked you a room tonight. One booking per evening.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<elseif $money lt 35>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The session room door">
<p class="scene-lead">A keyholder session costs $35 and your wallet says otherwise.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img cage-frame" @src="setup.velvetGuestMedia('keyholder')" alt="The Velvet provider holding a small key beside a compact metal chastity cage">
<h2 class="scene-title">Keyholder session</h2>
<<run setup.completeNightlifeGuestVisit("keyholder")>>
<p class="scene-lead">She sits you down. She reads her limits out loud. She asks for yours. Then she looks at your sheet and smiles.</p>
<<if ($flags.nightlifeGuestVisits || 0) lte 1>>
<p class="delayed">The duty lead runs the safety sheet line by line before the door closes and makes you say the stop word back. First sessions get the whole script.</p>
<<else>>
<p class="delayed">Nobody reads you the sheet tonight. The stop word is on the wall beside the door and the room is already set up the way you ask for it.</p>
<</if>>
<<if $caged>>
<p class="delayed">She inspects the cage. Two fingers through the bars. A tug on the lock. She names every thing you cannot do and makes you say yes after each one. <<if $flags.nightlifeJennyKnows>>"Your keyholder sent instructions. Two edges, no finish, and a written report. She signs her work."<</if>></p>
<<run setup.peakArousal()>>
<p class="delayed">Forty minutes of being kept exactly at the border. She thanks you for the ache like you did her a favor. You paid to not finish. You leave anyway.</p>
<<else>>
<p class="delayed">She gets you to the edge three times and stops. Every time. <<if $flags.nightlifeJennyKnows>>"Your keyholder wants the denial on record. I stamp it and she reads it. Say when."<</if>></p>
<span id="conv"></span>
<div id="options">
<<you-choice "Take the denial stamp and leave unfinished.">>
<<run setup.peakArousal()>>
<p class="delayed">She stamps the paper and holds it up so you have to look. You walk home with that in your pocket.</p>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
<<you-choice "Finish under her hand like a normal guest.">>
<<set $aroused = 0>>
<p class="delayed">She does it with a glance at the clock. Fast, clean, done. No stamp. Some nights get to be simple.</p>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
</div>
<</if>>
<<if $caged>>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !setup.nightlifeGuestReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The guest booking desk at the Velvet Rooms">
<p class="scene-lead">Reception already booked you a room tonight. One booking per evening.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<elseif setup.nightlifeRep() lt 7>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The premium suite corridor">
<p class="scene-lead">The premium suite opens at reputation 7. Yours is <<= setup.nightlifeRep()>>.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<elseif $money lt 50>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-guest.webp'" alt="The premium suite door">
<p class="scene-lead">The premium pair suite costs $50 and your wallet says otherwise.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img porn-frame" @src="setup.velvetGuestMedia('premium')" alt="">
<h2 class="scene-title">Premium pair suite</h2>
<<run setup.completeNightlifeGuestVisit("premium")>>
<p class="scene-lead">You sit in a low chair inside the room. Drink included. Close enough to see everything. She greets you as "our guest in the chair." The man does not greet you. He is the show.</p>
<<if ($flags.nightlifeGuestVisits || 0) lte 1>>
<p class="delayed">The suite card is printed for a first visit: drink included, hands to yourself, and one line reminding you that the chair is the point.</p>
<<else>>
<p class="delayed">The suite card is on the side table, exactly where it sat last time. Someone has crossed out the paragraph for first-time guests and written <em>he knows this one</em> in the margin.</p>
<</if>>
<p class="delayed">He fucks her facing you. She talks to you the whole time, like you are part of it and also not allowed to move. When she comes she looks at the chair, not at him.</p>
<<if $caged>>
<<run setup.peakArousal()>>
<p class="delayed">She notices the cage near the end and laughs. She finishes on him facing you. You sit there locked and watch.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<<else>>
<span id="conv"></span>
<div id="options">
<<you-choice "Finish in the chair with their blessing.">>
<<set $aroused = 0>>
<p class="delayed">She toasts you with her glass while you finish. "Guests who tip get the good seat next time." You believe her.</p>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
<<you-choice "Stay in the chair and let it burn.">>
<<run setup.nudgeArousal(18)>>
<p class="delayed">You keep your hands folded. The couple finishes. You paid to sit there and do nothing. That is what you do.</p>
<div class="delayed">[[Back to the lounge|Nightlife Velvet Hub]]</div>
<</you-choice>>
</div>
<</if>>
</div>
<</if>>
<</nobr>><<nobr>>
<<if !$flags.nightlifeFirstShiftDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-echo.webp'" alt="The Velvet Rooms reception lounge">
<p class="scene-lead">There is no note for someone the venue does not know.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<elseif $flags.nightlifeStanceBeatDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-echo.webp'" alt="Jenny and Alessia in the Velvet Rooms lounge">
<p class="scene-lead">$girlfriendName already knows about your Velvet evenings. That conversation happened once and stayed settled.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<elseif $nightlifeShiftsDone lt 2 && $flags.nightlifeGuestVisits lt 1>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-echo.webp'" alt="An unopened envelope at the Velvet Rooms reception">
<p class="scene-lead">The sealed note is not at reception yet. Keep working the floor or book a room first.</p>
<div class="continue-links">[[Back to the lounge|Nightlife Velvet Hub]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/nightlife/velvet-echo.webp'" alt="Jenny seated in the Velvet Rooms lounge while Alessia leans on the counter">
<h2 class="scene-title">The sealed note</h2>
<p class="scene-lead">The envelope holds one line in an unfamiliar clerk's hand: <em>"Your party is waiting in the lounge."</em> At this hour the lounge holds two people you know very well. One of them is holding court.</p>
<<if $flags.nightlifeFirstShiftStance eq "public-operations" || $flags.nightlifeFirstShiftStance eq "public-service">>
<p class="delayed">$girlfriendName sits with her legs crossed and her phone face-up on the table. The screen shows the licensed ANWO work directory and one entry in particular: your legal name, your role, verified. $bestfriendName found it in a group chat two hours ago and has been enjoying it ever since.</p>
<<else>>
<p class="delayed">$bestfriendName booked the guest lounge for the evening the way she books everything, loudly and in someone else's name. She spotted you on the floor during your last visit, photographed nothing, and saved the whole discovery like a dessert. $girlfriendName is here to be served it.</p>
<</if>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'story/nightlife/mara-portrait.webp'" alt="Mara"><div><span class="name-container"><span class="name">Mara</span></span><span class="content">I do not referee lounge conversations. The room is yours for as long as the booking lasts.</span></div></div>
<<actor bestfriend>>Look what the venue produced. The stray has a badge now. I said he'd end up in uniform somewhere. I just thought it would be cuter.<</actor>>
<<actor girlfriend>>Evening shifts. Real pay.<<if $flags.nightlifeFirstShiftStance eq "private-alias">> She spotted you working here. You managed to keep the job out of the directory, but not out of her evening.<<else>> I read the directory entry. How long have you been doing this?<</if>><</actor>>
<<actor-thought you>>
She is not angry. She has her drink, her seat, and the whole evening to watch me. I can explain myself, or I can stand here in the badge and let her decide.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "You decide which of my nights here are yours.">>
<<run setup.applyIdentity("nightlife-echo-devotion")>>
<<actor girlfriend>>Then Friday nights after closing are mine. You tell me the rooms. You tell me with your face, not a summary. Good boy for asking first.<</actor>>
<<actor bestfriend>>He just handed you the whole venue. I didn't even have to push.<</actor>>
<div class="delayed">[[Go home with her|Nightlife Velvet Debrief][$flags.nightlifeStanceBeatDone = true; $flags.nightlifeStanceBeatStance = "devotion"; $flags.nightlifeJennyKnows = true; $flags.nightlifeJennyFavored = true; $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)]]</div>
<</identity-choice>>
<<identity-choice resistance "These evenings stay mine. Both doors.">>
<<run setup.applyIdentity("nightlife-echo-boundary")>>
<<actor girlfriend>>Then they're yours. <<if $caged>>You're still locked, so I can live with that.<<if $flags.noAlphaBoundary>> Same rule as always. You keep your line, I keep the key.<</if>><<else>>Just tell me when you're working so I can make my own plans.<</if>><</actor>>
<<actor bestfriend>>He said a boundary out loud and meant it. Mark the calendar.<</actor>>
<div class="delayed">[[Go home with her|Nightlife Velvet Debrief][$flags.nightlifeStanceBeatDone = true; $flags.nightlifeStanceBeatStance = "boundary"; $flags.nightlifeJennyKnows = true; $flags.nightlifeJennyFavored = true; $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)]]</div>
<</identity-choice>>
<<you-choice "Both, sometimes. Ask me per night.">>
<<actor girlfriend>>Per night. Some nights I want the report. Some nights I just want your face when you walk in. Keep the badge either way.<</actor>>
<<actor bestfriend>>He negotiated nights like a gym membership. Cute.<</actor>>
<div class="delayed">[[Go home with her|Nightlife Velvet Debrief][$flags.nightlifeStanceBeatDone = true; $flags.nightlifeStanceBeatStance = "open"; $flags.nightlifeJennyKnows = true; $flags.nightlifeJennyFavored = true; $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<set _debriefImage = $caged ? "story/nightlife/velvet-echo-debrief.webp" : "girlfriend/pp.webp">>
<<if !$flags.nightlifeStanceBeatDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+_debriefImage" alt="Your girlfriend at home">
<p class="scene-lead">She is not waiting on this conversation yet.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<elseif $flags.nightlifeEchoDebriefDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+_debriefImage" alt="Your girlfriend at home">
<p class="scene-lead">You already had this talk at the counter. It stayed settled.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+_debriefImage" alt="Your girlfriend during the conversation at home">
<h2 class="scene-title">The kitchen</h2>
<p class="scene-lead">$bestfriendName already left. $girlfriendName sits at the counter<<if $caged>> with the key on her chest<</if>>. She waited.</p>
<<if $flags.nightlifeStanceBeatStance eq "devotion">>
<<actor girlfriend>>Friday after closing, then. Tell me if your shift runs late.<</actor>>
<<elseif $flags.nightlifeStanceBeatStance eq "boundary">>
<<actor girlfriend>>You said those nights are yours. I heard you.<</actor>>
<<else>>
<<actor girlfriend>>We'll ask each other per night. I can work with that.<</actor>>
<</if>>
<p class="delayed">She pushes a glass of water across the counter and waits until you sit down.</p>
<<actor girlfriend>>What do you actually like about the job? I barely got to ask before she started.<</actor>>
<<if $flags.nightlifeStanceBeatStance eq "boundary">>
<<actor you>>I know what I'm doing there.<</actor>>
<<actor girlfriend>>Then tell me about a good shift. What went right?<</actor>>
<p>She listens while you describe getting through a busy reception without needing help. When you mention a guest who remembered your name, she asks what they said.</p>
<<elseif $flags.nightlifeStanceBeatStance eq "devotion">>
<<actor you>>It is something I found for myself.<</actor>>
<<actor girlfriend>>I wish you'd told me sooner. I would've liked to hear it from you.<br>Do you want company tonight, or are you tired of people?<</actor>>
<<else>>
<<actor you>>The details stay between us.<</actor>>
<<actor girlfriend>>She already knows you work there. She found you. The details stay in this kitchen.<</actor>>
<</if>>
<div class="continue-links">[[Go home|Home][$flags.nightlifeEchoDebriefDone = true]]</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<set _parkSurveyReady = !$flags.surveyPark && $gameDate.getHours() lt 22 && ($flags.fieldSurveyOpen || $flags.surveySister || hasVisited("School 5 Day anwo"))>>
<div class="scene-panel compact">
<<if $gameDate.getHours() lt 22>>
<img class="hero-img" @src="setup.ImagePath+'places/park.png'" alt="">
<<else>>
<img class="hero-img" @src="setup.ImagePath+'park/park-night.png'" alt="">
<</if>>
<<if $caged>>
<p class="scene-lead">You walk carefully through the park, aware of the cage with every step.</p>
<<elseif $world eq "anwo">>
<p class="scene-lead">The usual crowd fills the paths, now with ANWO rankings mixed into the gossip.</p>
<<elseif $gameDate.getHours() gte 22>>
<p class="scene-lead">At night, the paths are empty enough that every footstep carries.</p>
<<else>>
<p class="scene-lead">Open air. Waste time or find trouble.</p>
<</if>>
<<if _parkSurveyReady>>
<div class="quest-banner">
<strong>Field survey</strong>
<p>A group of women on a bench looks free enough to interrupt for your ANWO questionnaire.</p>
[[Interview the group|Survey - Ask Group of women]]
</div>
<<elseif !$flags.alessiaKeyChapterDone && $flags.alessiaKeyTermsDone && !$flags.alessiaKeyParkDone && setup.alessiaKeyWeekReady(5)>>
<div class="quest-banner">
<strong>Walk with your keyholder</strong>
<p>$girlfriendName is waiting by the benches with the key still around her neck.</p>
[[Find her by the benches|Key Week Park Walk]]
</div>
<<elseif setup.nightlifeParkReady()>>
<div class="quest-banner">
<strong>Mara is waiting away from the hotel</strong>
<p>After two weekends of testing your discretion, she wants a real conversation in public daylight.</p>
[[Meet her by the north gate|Nightlife Park Conversation]]
</div>
<<elseif !$flags.surveyPark && ($flags.fieldSurveyOpen || hasVisited("School 5 Day anwo")) && $gameDate.getHours() gte 22>>
<p class="hint-line">Too late for interviews, the park crowd thinned out. Come back before 22:00.</p>
<<elseif !$flags.surveyPark && $flags.day3SurveyDone && !$flags.fieldSurveyOpen && !hasVisited("School 5 Day anwo")>>
<p class="hint-line">Field interviews aren't assigned yet. Next school day hands those out.</p>
<</if>>
<div class="hub-actions">
<<if $gameDate.getHours() lt 22>>[[Hang around]]<</if>>
<<if $gameDate.getHours() lt 22>>[[Look through the bushes|Park - look through the brushes]]<</if>>
<<if _parkSurveyReady>>[[Interview the group|Survey - Ask Group of women]]<</if>>
<<if $gameDate.getHours() lt 22 and $world eq "anwo" and hasVisited("School 12 Day anwo") and !$flags.parkChemistryDone>>
<<link `"Overhear " + $bullyName + " and " + $exfriendName` "Park chemistry">><</link>>
<</if>>
<<if $gameDate.getHours() lt 22 and $world eq "anwo" and $flags.day8Submitted and !$flags.day10Confessed and !$flags.parkGossipDone>>
<<link "Listen to the bench argument" "Park ANWO gossip">><</link>>
<</if>>
<<if $caged && $flags.bullyCheckInDone && !$flags.cagedVoyeurDone && $gameDate.getHours() lt 22>>
[[Something in the bushes|Caged park witness]]
<</if>>
<<if $caged && $flags.ownedMorningAfterDone && !$flags.parkKeyholderTeaseDone && $gameDate.getHours() lt 20>>
<<if setup.scoreGate(5) || setup.scoreGate(-5)>>
<<link `$girlfriendName + " is waiting by the benches"` "Park keyholder tease">><</link>>
<<else>>
<span class="hint-line score-gate-hint">Keyholder walk locked: Devotion +5 or Resistance +5 required. Current: <<= setup.mindsetLabel().text>>.</span>
<</if>>
<</if>>
[[Men's toilet|Men's Toilet Park]]
[[Home]]
</div>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'park/survey-women.webp'" alt="The adult interview group by the park bench">
<<if $flags.surveyPark>>
<p class="scene-lead">You already have the park interview in your notes.</p>
<div class="continue-links">[[Return to the park|Park]]</div>
<<else>>
<p class="scene-lead">Three women are sharing a bench near the path. One looks up from her lunch when you stop a few steps away.</p>
<<actor you>>
Sorry, could I ask you a few questions for a class project?
<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'park/survey-women.webp'"><div><span class="name-container"><span class="name">Woman with lunch</span></span><span class="content">If it's short. I'm heading back to work soon.</span></div></div>
<<actor you>>
It's about ANWO. Giving people different authority based on an alpha or beta ranking. You can leave any question blank.
<</actor>>
<p>They pass the sheet along the bench. The woman at the end circles a sentence before handing it back.</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'park/survey-women.webp'"><div><span class="name-container"><span class="name">Woman at the end of the bench</span></span><span class="content">I might choose an arrangement at home. I don't want a school choosing it for me. This question doesn't separate those.</span></div></div>
<<actor you>>There isn't a box for that. I can write it underneath.<</actor>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'park/survey-women.webp'"><div><span class="name-container"><span class="name">Woman at the end of the bench</span></span><span class="content">Please do. I don't want that counted as agreeing to both.</span></div></div>
<p>The others nod. The woman with lunch checks her watch and starts collecting the wrappers.</p>
<span id="conv"></span>
<div id="options">
<<you-action "Keep her explanation beside the answers.">>
<p>You read the note back to her. She asks you to underline the part about choosing for yourself.</p>
<div class="continue-links"><<link "Thank them and return to the park" "Park">><<run setup.completeSchoolInterview("park", true)>><</link>></div>
<</you-action>>
<<you-action "Keep only the ticked answers.">>
<p>You fold the sheet before copying the comment. At the results table, the ticks will be all you have to show.</p>
<div class="continue-links"><<link "Thank them and return to the park" "Park">><<run setup.completeSchoolInterview("park", false)>><</link>></div>
<</you-action>>
</div>
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'park/hang.png'">
<<if $caged>>
<p class="scene-lead">You lower yourself carefully onto a bench and adjust your jeans before anyone notices.</p>
<<else>>
<p class="scene-lead">You kill an hour watching people who look like they know where they belong.</p>
<</if>>
<<if $caged && random(1, 4) eq 1>>
<p class="delayed">A jogger glances at your belt as she passes, looks back once, and keeps running.</p>
<<actor-thought you>>
Did she see it? Your shirt covers everything, but you have been walking stiffly to keep the cage from pinching. Maybe that was enough.
<</actor-thought>>
<</if>>
<<if $flags.phoneUnlocked && random(1, 5) eq 1 && $girlfriendTrustLevel gte 8>>
<<actor girlfriend>>
(text) you're at the park again.<br>i like that you go outside.<br>don't talk to anyone cuter than me. 😘 /* prose-ok: her text, the flat 'again' is how she opens every park message */
<</actor>>
<<elseif $flags.phoneUnlocked && random(1, 5) eq 1 && $girlfriendTrustLevel gte 5>>
<<actor girlfriend>>
(text) you're at the park again. doing what? /* prose-ok: same text opener, spoken rhythm */
don't answer, i already know you're doing nothing like usual. 😏
<</actor>>
<<elseif $flags.phoneUnlocked && random(1, 5) eq 1 && $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>
(text) home. now. the park doesn't pay rent.
<</actor>>
<</if>>
<div class="continue-links">
[[Park][$gameDate to setup.changeDate($gameDate, 'hours', 1)]]
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/park-keyholder-tease.jpg'" alt="Jenny holding the key close on a park bench">
<p class="scene-lead">$girlfriendName is already on the bench when you arrive. Coat open. One leg crossed. The little key rests against her chest where sunlight keeps catching it.</p>
<<actor girlfriend>>
Sit. Close.
No, closer than that. I didn't bring you out here for polite space.
<</actor>>
<p class="delayed">Her thigh presses against yours. She takes your wrist and guides your hand beneath the edge of her coat, high enough to feel heat through thin fabric. Not high enough to forget where you are.</p>
<<actor-thought you>>
People pass ten feet away, their shoes scraping over gravel as a dog strains at its leash.
She kisses you without checking who is watching. You harden against the cage before you manage to kiss her back.
<</actor-thought>>
<<if $girlfriendTrustLevel gte 8>>
<<actor girlfriend>>
I missed having you this close.
You can touch me, baby. Keep that hand where I put it, and do not ask about the key.
<</actor>>
<<elseif $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>
Don't mistake access for forgiveness.
You get my thigh. I keep the key. Be grateful in the correct order.
<</actor>>
<<else>>
<<actor girlfriend>>
See? I can be nice when you behave.
Keep touching me there. I will tell you if you can move your hand.
<</actor>>
<</if>>
<span id="conv"></span>
<div id="options">
<<identity-choice devotion "Hold still and let her guide your hand.">>
<<set $flags.parkKeyholderTeaseDone = true>>
<<actor girlfriend>>
Good boy. Gentle. If anyone looks, smile like this is a normal date.
And stop blushing. You are making them look.
<</actor>>
<<run setup.applyIdentity("park-keyholder-follow")>>
<<run setup.changeFavor(1)>>
<<run setup.nudgeArousal(14)>>
<div class="delayed">[[Walk the long way around the park|Park][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<identity-choice resistance "Five minutes unlocked. We could find somewhere private.">>
<<set $flags.parkKeyholderTeaseDone = true>>
<<actor girlfriend>>
And waste this view? No.
You wanted private because private lets you pretend you're still in charge. Keep your hand there. Behave.
<</actor>>
<<run setup.applyIdentity("park-keyholder-unlock")>>
<<run setup.changeFavor(-1)>>
<<run setup.nudgeArousal(12)>>
<div class="delayed">[[Leave with the key still against her chest|Park][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</identity-choice>>
<<you-choice "Kiss her and thank her for coming.">>
<<set $flags.parkKeyholderTeaseDone = true>>
<<actor girlfriend>>
There you are.
My boyfriend. My locked little problem. Still sweet when you stop bargaining.
<</actor>>
<<run setup.changeFavor(1)>>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[Stay beside her until the bench falls into shadow|Park][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.parkChemistryDone = true>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/park-chemistry.jpg'" alt="Two classmates bonding on a park bench while the MC watches from the path">
<p class="scene-lead">Near the path: <strong>$bullyName</strong> and <strong>$exfriendName</strong>, close enough to overhear.</p>
<<actor bully>>
Council thing's real. You good? You've been wound tight since the project blew up.
<</actor>>
<<actor exfriend>>
I'm fine. I just hate watching $youName play martyr with my grade.
<</actor>>
<<actor bully>>
He panicked. You would too if the teacher called your row and named the missing answer. Hey... don't freeze me out. We still ball on Fridays.
<</actor>>
<<actor exfriend>>
...Yeah. Fridays. I need that more than the hierarchy lectures.
<</actor>>
<<actor bully>>
Then show up. And stop measuring yourself against me in the locker room. It's boring when you lose before you try.
<</actor>>
<<actor exfriend>>
Easy for you to say.
<</actor>>
<<actor bully>>
Always is. That's why people relax around me. Come on... I'll buy drinks if you stop sulking like $youName.
<</actor>>
<<actor-thought you>>
They talk like old friends. Your name gets the first real laugh out of both of them, and the laugh is the kind that leaves you out of the joke entirely.
<</actor-thought>>
<<if $caged>>
<<actor-thought you>>
The cage presses into you while they laugh. If they knew about it, the joke would get much worse, and $bullyName would never stop telling it.
<</actor-thought>>
<<run setup.nudgeArousal(10)>>
<</if>>
<div class="continue-links">
[[Park][$gameDate to setup.changeDate($gameDate, 'hours', 1)]]
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.parkGossipDone = true>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/park-anwo-gossip.jpg'" alt="Strangers on a park path discussing ANWO while the MC overhears">
<p class="scene-lead">Two people on the next bench are arguing about the survey results that went up to student council. You catch your own group's numbers quoted back at you like they belong to someone else.</p>
<div class="actor a-custom delayed"><div><span class="name-container"><span class="name">Stranger 1</span></span><span class="content">So the "beta" types just follow instructions and like it? That's not a school system, that's a pet arrangement.</span></div></div>
<div class="actor a-custom delayed"><div><span class="name-container"><span class="name">Stranger 2</span></span><span class="content">Read the field interviews. Some people actually scored higher when someone else made the calls. The data says what it says.</span></div></div>
<div class="actor a-custom delayed"><div><span class="name-container"><span class="name">Stranger 1</span></span><span class="content">Sure, and I bet those people got to choose who was making the calls. There's a difference between trusting someone and being managed.</span></div></div>
<<actor-thought you>>
You ran the field interviews. You wrote down the answers that made ANWO look workable, and now two strangers are debating your data like it was ever neutral.
The word "managed" sits in your chest before you can swallow it.
<</actor-thought>>
<<if $caged>>
<<actor-thought you>>
The cage presses into you while they talk about betas who follow instructions. If they knew you were wearing one right now, the argument would stop being abstract.
<</actor-thought>>
<<run setup.nudgeArousal(8)>>
<</if>>
<div class="continue-links">
[[Park][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]
</div>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'park/toilet.png'">
<<if setup.nightlifeParkWcReady()>>
<div class="quest-banner">
<strong>A separate privacy problem</strong>
<p>The envelope Mara mentioned is still taped behind the broken hand dryer. Taking it is optional and not part of her job offer.</p>
[[Check behind the dryer|Nightlife Park WC]]
</div>
<<elseif $flags.nightlifeParkWcDone>>
<<silently>>
/* One-anti-repeat pool of washroom side beats, keyed on $flags.parkWcLast. Opens up after the
* envelope errand, because before that the MC refuses to go in at all. */
<<set _pwc = random(1, 4)>>
<<if ($flags.parkWcLast || 0) eq _pwc>>
<<set _pwc = (_pwc % 4) + 1>>
<</if>>
<<set $flags.parkWcLast = _pwc>>
<</silently>>
<p class="delayed">
<<if _pwc eq 1>>
A man at the mirror takes a long time washing his hands. He watches you in the glass the whole time. Neither of you says anything.
<<elseif _pwc eq 2>>
Two students are skipping a period in the far stall, passing a phone back and forth. One of them turns the screen away when you walk past.
<<elseif _pwc eq 3>>
Somebody has written on the stall wall in marker. A line about beta boys, and a room number that nobody has painted over.
<<else>>
Somebody has peeled the tape off the vent under the hand dryer and left the strip in the basin. A student drying his hands asks whether you know what used to be under there. You say no.
<</if>>
</p>
<<if _pwc eq 1>>
<<actor-thought you>>
You keep both hands under the tap until he leaves first.
<</actor-thought>>
<<run setup.nudgeArousal(3)>>
<<elseif _pwc eq 3>>
<<actor-thought you>>
I read it twice before I remember where I am standing.
<</actor-thought>>
<<run setup.nudgeArousal(2)>>
<<elseif _pwc eq 4>>
<img class="delayed centered" @src="setup.ImagePath+'story/nightlife/park-wc-envelope.webp'">
<<actor-thought you>>
I drop the strip in the bin on my way out. He watches me do it.
<</actor-thought>>
<<run setup.nudgeArousal(2)>>
<</if>>
<<else>>
<<actor-thought you>>
Nope. I'm not going in there.
<</actor-thought>>
<</if>>
<div class="continue-links">
[[Park]]
</div>
<</nobr>><<nobr>>
<<silently>>
/* Seven bush situations on a rotating index with one anti-repeat re-roll ($flags.parkSpyLast). */
<<set _spy = setup.parkSpyPick(random(1, 7), $flags.parkSpyLast)>>
<<set $flags.parkSpyLast = _spy>>
/* Evening visits are too dark for detail: the night still carries the scene instead. */
<<set _spyEvening = $gameDate.getHours() gte 20>>
<<set _spyStill = _spyEvening ? 'park/park-night.png' : 'park/spy-fuck' + (((_spy - 1) % 3) + 1) + '.webp'>>
<</silently>>
<img class="delayed centered" @src="setup.ImagePath + _spyStill">
<p class="delayed">
<<if _spy eq 1>>
Two people your age lie on a blanket under a tree. One of them has a hand under the other's shirt. You stop behind the bushes. The path runs right past them.
<<elseif _spy eq 2>>
Two people stand against the big oak. The shorter one has both hands on the other's hips. They are busy and they do not look around. The shorter one laughs into a shoulder and keeps going.
<<elseif _spy eq 3>>
A coat lies on the far bench. Two pairs of legs stick out from under it, pointing the wrong way for sitting. Someone is on their knees in front of the bench. They are in no hurry.
<<elseif _spy eq 4>>
A second blanket lies further along the grass. The one on top turns her head toward the bushes and looks at you. She does not stop what she is doing. She keeps watching you while she does it.
<<elseif _spy eq 5>>
A woman sits on the low stone wall and someone stands between her knees. Her hands stay in his hair. A cyclist goes past on the path and neither of them looks up.
<<elseif _spy eq 6>>
Two people share the bench under one jacket. From the path it is only a jacket. From the bushes the jacket keeps moving, and one of them is biting down on a laugh.
<<else>>
Past the fence the reeds are moving wrong. Someone is on their knees back there. You hear it before you can see anything.
<</if>>
</p>
<<if _spyEvening>>
<p class="delayed">The light behind the trees is almost gone. Nobody out here came for the view.</p>
<</if>>
<<if $caged>>
<<actor-thought you>>
That used to be you. Hands on skin. A mouth on your neck. Nothing locked.
Now you watch from the dirt. The metal bites when you move.
<</actor-thought>>
<<elseif ($alphaBeta || 0) gte 4>>
<<actor-thought you>>
You have stopped here before. Watching from the leaves gets you hard faster than thinking about the blanket.
That should bother you. It does not.
<</actor-thought>>
<<else>>
<<actor-thought you>>
You should keep walking. One of them reaches for the other's belt. You crouch lower.
<</actor-thought>>
<</if>>
<<if $flags.parkChemistryDone>>
<<actor-thought you>>
Last time you were here, $bullyName and $exfriendName sat on that bench. They talked about Fridays. They talked about her.
This couple does not know about the hierarchy. Lucky them.
<</actor-thought>>
<</if>>
<<if $flags.classListLive && $publicAlphaBeta gte 4>>
<div class="actor a-custom delayed"><div><span class="name-container"><span class="name">Student passing on the path</span></span><span class="content">You're on the board, right? They print that list at lunch. Everyone reads the bottom half for fun. Didn't think the beta side had to hide in a bush for a look.</span></div></div>
<p class="delayed">He keeps walking before you can answer. You stay behind the leaves. He did not wait for one.</p>
<</if>>
<<actor-thought you>>
A twig digs into your knee. Five more seconds, you tell yourself. You stay for ten.
<</actor-thought>>
<div class="delayed">
<<run setup.nudgeArousal(6)>>
[[I need to go | Park]]
</div>
<</nobr>><<nobr>>
<<if !$flags.anwoGroupFormed && !hasVisited("School 1 Day anwo")>>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
</div>
<div class="messages">
<p class="delayed">No project thread yet. Numbers get exchanged in class first.</p>
<p class="hint-line">Go to school. The group chat lights up after Day 1.</p>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<<else>>
<<set $flags.phone1Read = true>>
<<set $flags.anwoGroupFormed = true>>
<<set $flags.questHint = "">>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
<div>
<i class="fa-solid fa-wifi fa-lg" style="position: relative; bottom: 3px; margin-right: 3px"></i>
<svg height="13" width="13" xmlns="http://www.w3.org/2000/svg" style="margin-right: 3px">
<polygon points="13,0 13,13 0,13" fill="#ddd"/>
</svg>
<svg height="15" width="8" xmlns="http://www.w3.org/2000/svg" style="margin-top: -2px;">
<rect y="2" x="2" width="4" height="2" fill="white"/>
<rect y="5" x="0" width="8" height="9" stroke="white" stroke-width="2"/>
<rect y="9" x="0" width="8" height="5" stroke="white" stroke-width="1" fill="white"/>
</svg>
</div>
</div>
<div class="messages">
<<include "School 4 Day anwo 2">>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="The group's survey draft attachment">
<<actor girlfriend>>
Made the group. Please put project stuff here so I don't have to find it in four chats.
<</actor>>
<<actor bully>>
Does that include asking what the project is?
<</actor>>
<<actor exfriend>>
I'm finishing the survey draft. The result categories come from the district template.
<</actor>>
<<actor girlfriend>>
Send it here. Everyone reads it before next class, then we test it on ourselves.
<</actor>>
<<actor you>>
Should we include questions about whether people actually want ANWO?
<</actor>>
<<actor bestfriend>>
You got the spare chair, $youName. Stop campaigning in the group chat.
<</actor>>
<<actor exfriend>>
Yes. Support, opposition, and how people think it would affect them personally.
<</actor>>
<<actor bully>>
Ask that at training and we'll still be there next week.
<</actor>>
<<actor girlfriend>>
$exfriendName sends the draft. $bestfriendName checks the wording.
$bullyName and $youName, read it before class. Actually read it.
<</actor>>
<<actor bestfriend>>
I'll fix $exfriendName's commas. $bullyName still hasn't opened the draft.
<</actor>>
<<actor you>>
I'll read it.
<</actor>>
<<actor bully>>
Good job, bro.
<</actor>>
<<actor girlfriend>>
Let him read it. I'd rather find the confusing questions now.
<</actor>>
<<actor exfriend>>
Draft sent.
<</actor>>
<<actor girlfriend>>
Got it. Bring your comments to class. I want the draft sorted before we start asking other people.
<</actor>>
<</nobr>><<nobr>>
<<set $flags.phone2Read = true>>
<<set $flags.questHint = "">>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
<div>
<i class="fa-solid fa-wifi fa-lg" style="position: relative; bottom: 3px; margin-right: 3px"></i>
<svg height="13" width="13" xmlns="http://www.w3.org/2000/svg" style="margin-right: 3px">
<polygon points="13,0 13,13 0,13" fill="#ddd"/>
</svg>
<svg height="15" width="8" xmlns="http://www.w3.org/2000/svg" style="margin-top: -2px;">
<rect y="2" x="2" width="4" height="2" fill="white"/>
<rect y="5" x="0" width="8" height="9" stroke="white" stroke-width="2"/>
<rect y="9" x="0" width="8" height="5" stroke="white" stroke-width="1" fill="white"/>
</svg>
</div>
</div>
<div class="messages">
<<include "google sissy discussion">>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'phone/sissy1.webp'" alt="The definition search shared with the project group">
<<actor you>>
Does anyone know what $teacherName means by "sissy" on the assessment sheet? I looked it up and the results don't explain what she's testing.
<</actor>>
<<actor girlfriend>>
She put that on yours too? I thought you meant something she'd said after class.
<</actor>>
<<actor bully>>
You've put that in your search history now 😂
<</actor>>
<<actor bestfriend>>
And dropped the screenshots into $girlfriendName's project chat. Very thorough, $youName.
<</actor>>
<<actor you>>
The sheet doesn't define it. I'm asking what we're meant to prepare.
<</actor>>
<<actor exfriend>>
Use the criteria she gave us. Some website won't know how she's marking the essay.
<</actor>>
<<actor bestfriend>>
This one has twelve types. Pick the page that looks most like your browser history.
<</actor>>
<<actor girlfriend>>
You don't have to open it because she sent it. If you're still confused, ask about the sheet in class.
<</actor>>
<span id="conv"></span>
<<if !$flags.sissyTestDone && !$flags.sissyTestDeclined>>
<div id="options">
<<you-choice "I'll take it. I want to see the questions.">>
<<set $flags.sissyTestDeclined = false>>
<<actor bestfriend>>Post the result. $girlfriendName's project chat already has your twelve quiz pages.<</actor>>
<<actor girlfriend>>I'm going to eat. Message me afterward if you're still worried.<</actor>>
<div class="delayed">[[Open the quiz|checkout sissy test]]</div>
<</you-choice>>
<<you-choice "No. I'm not taking a sissy quiz for your entertainment.">>
<<set $flags.sissyTestDone = false>>
<<set $flags.sissyTestDeclined = true>>
<<set $flags.questHint = "">>
<<actor bestfriend>>Then close it. $girlfriendName already told you what to do with the assessment sheet.<</actor>>
<<actor girlfriend>>He said no. Leave it there.<</actor>>
<div class="delayed">[[Back to Chats|Phone chats]]</div>
<</you-choice>>
</div>
<<elseif setup.schoolQuizOutcome() eq "quiz">>
<p class="hint-line">You already took the quiz. The result is in your browser history.</p>
<<elseif setup.schoolQuizOutcome() eq "declined">>
<p class="hint-line">You refused the quiz and closed the link.</p>
<<else>>
<p class="hint-line">This saved activity record is incomplete. It does not establish whether you completed the quiz.</p>
<</if>>
<</nobr>><<nobr>>
<img @src="setup.ImagePath+'phone/type-of-sissy.webp'" class="hero-img centered" alt="The adult Twelve Types quiz page">
<<if setup.schoolQuizOutcome() eq "quiz">>
<p class="scene-lead">You already worked through these pages. The visit is in your activity history.</p>
<<elseif $flags.day15Passed>>
<p class="scene-lead">The assessment is over. Opening a quiz now would not explain the activity record that was collected then.</p>
<<else>>
<<run setup.completeSchoolQuiz()>>
<p class="scene-lead">Each answer opens another description, followed by links to the other types. You keep checking the next page to see whether the distinctions make any more sense.</p>
<p>An hour passes before you reach the end. None of the pages refers to the council's assessment sheet.</p>
<<actor-thought you>>I should have stopped when I saw it wasn't about the assignment. Now I've read the whole thing and still don't know how she's marking us.<</actor-thought>>
<</if>>
<div class="continue-links">[[Back to Chats|Phone chats]]</div>
<</nobr>><<nobr>>
<<set $flags.phone3Read = true>>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
<div>
<i class="fa-solid fa-wifi fa-lg" style="position: relative; bottom: 3px; margin-right: 3px"></i>
<svg height="13" width="13" xmlns="http://www.w3.org/2000/svg" style="margin-right: 3px">
<polygon points="13,0 13,13 0,13" fill="#ddd"/>
</svg>
<svg height="15" width="8" xmlns="http://www.w3.org/2000/svg" style="margin-top: -2px;">
<rect y="2" x="2" width="4" height="2" fill="white"/>
<rect y="5" x="0" width="8" height="9" stroke="white" stroke-width="2"/>
<rect y="9" x="0" width="8" height="5" stroke="white" stroke-width="1" fill="white"/>
</svg>
</div>
</div>
<div class="messages">
<<include "Group chat after day10">>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day8-results-table.jpg'" alt="The group checking the project documents after the review">
<<actor bully>>
Nearly missed lunch for a spreadsheet. Are we finished with it now?
<</actor>>
<<if $flags.surveyCaveatSubmitted is true>>
<<actor exfriend>>The note was in our file. I've sent the original again with the page number in the email.<</actor>>
<<actor bestfriend>>Highlight the page number next time. $girlfriendName had to carry your note into the review.<</actor>>
<<elseif $flags.surveyCaveatSubmitted is false>>
<<actor exfriend>>We submitted those tables together. I did not change them after everyone left.<</actor>>
<<actor you>>I know you didn't. I should have asked for the note before we sent it.<</actor>>
<<else>>
<<actor exfriend>>The source tables are attached. Check them against what we actually submitted.<</actor>>
<</if>>
<<actor exfriend>>
Keep your original interview sheets. I'll need them for the presentation.
<</actor>>
<<actor girlfriend>>
I signed the cover too. Someone keeps the receipts; it won't be me.
<</actor>>
<<if $flags.day10ConcernRecorded>>
<<actor you>>She recorded the objection. I checked it before we left.<</actor>>
<<else>>
<<actor you>>I'll keep the forms. I want the explanation next to the numbers.<</actor>>
<</if>>
<<actor bestfriend>>
Then take the interview sheets home. $girlfriendName has lost enough lunches to your notes.
<</actor>>
<<actor girlfriend>>
$youName, walk with me after the next class. I want to talk without everyone joining in.
<</actor>>
<<actor bully>>
Fine by me. I'm going to training.
<</actor>>
<</nobr>><<nobr>>
<<set $flags.phone4Read = true>>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
<div>
<i class="fa-solid fa-wifi fa-lg" style="position: relative; bottom: 3px; margin-right: 3px"></i>
<svg height="13" width="13" xmlns="http://www.w3.org/2000/svg" style="margin-right: 3px">
<polygon points="13,0 13,13 0,13" fill="#ddd"/>
</svg>
<svg height="15" width="8" xmlns="http://www.w3.org/2000/svg" style="margin-top: -2px;">
<rect y="2" x="2" width="4" height="2" fill="white"/>
<rect y="5" x="0" width="8" height="9" stroke="white" stroke-width="2"/>
<rect y="9" x="0" width="8" height="5" stroke="white" stroke-width="1" fill="white"/>
</svg>
</div>
</div>
<div class="messages">
<<include "GF private after cage">>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<<actor girlfriend>>
Hey. Just us, not the group. /* prose-ok: private text */
<</actor>>
<<if $cageAcceptance eq "eager">>
<<actor girlfriend>>
Still thinking about that click? 🔐
You asked for it. Don't act shocked if I enjoy the key.
<</actor>>
<<elseif $cageAcceptance eq "reluctant">>
<<actor girlfriend>>
I know last night was a lot.
Leave the cage alone and talk to me if the fit feels wrong.
<</actor>>
<<else>>
<<actor girlfriend>>
How does it feel this morning?
Don't say "fine." I can already picture you fidgeting.
<</actor>>
<</if>>
<<actor girlfriend>>
$sisterName texted me "you're welcome" with a smug emoji
If she makes you do weird chores, tell me... Or don't, if you're into it. 😏
<</actor>>
<<actor you>>
I'll... manage.
<</actor>>
<<actor girlfriend>>
You'll manage. Wear loose pants and try to walk normally at school.
And $youName?
If you buy me something nice with your sad hotel money, I might unlock a little longer next time.
I'm mostly kidding. 😘
<</actor>>
<</nobr>><<nobr>>
<<set _chatBadge = setup.phoneChatBadge()>>
<<set _taskBadge = setup.phoneTaskBadge()>>
<<set _snapBadge = setup.phoneSnapBadge()>>
<div class="phone-shell phone-home">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Phone</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-home-body">
<p class="phone-home-label">Apps</p>
<div class="phone-app-grid">
<a data-passage="Phone chats" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-chat">💬</div>
<<if _chatBadge gt 0>><span class="phone-app-badge"><<= _chatBadge>></span><</if>>
<span class="phone-app-name">Chats</span>
</div>
</a>
<a data-passage="Phone tasks" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-tasks">✅</div>
<<if _taskBadge gt 0>><span class="phone-app-badge"><<= _taskBadge>></span><</if>>
<span class="phone-app-name">Tasks</span>
</div>
</a>
<a data-passage="Phone snap" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-snap" aria-hidden="true">👻</div>
<<if _snapBadge gt 0>><span class="phone-app-badge"><<= _snapBadge>></span><</if>>
<span class="phone-app-name">Snap</span>
</div>
</a>
<<if $flags.sissyHintGiven && !$flags.googledSissy>>
<a data-passage="Google sissy" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-browser">🔍</div>
<span class="phone-app-badge">!</span>
<span class="phone-app-name">Browser</span>
</div>
</a>
<<elseif $flags.googledSissy>>
<a data-passage="Web trends" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-browser">🔍</div>
<<if setup.webTrendReady()>><span class="phone-app-badge">!</span><</if>>
<span class="phone-app-name">Browser</span>
</div>
</a>
<<else>>
<div class="phone-app phone-app-disabled" title="Nothing to search right now">
<div class="phone-app-icon phone-app-icon-browser">🔍</div>
<span class="phone-app-name">Browser</span>
</div>
<</if>>
<<if setup.galleryAppOpen()>>
<<run setup.applyFavorGalleryBonus()>>
<a data-passage="Phone gallery" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-gallery">🖼️</div>
/* New pics badge lives on Snap (delivery), Gallery is the save album */
<span class="phone-app-name">Gallery</span>
</div>
</a>
<<elseif $caged && $girlfriendTrustLevel gte 5>>
<div class="phone-app phone-app-disabled" title="She hasn't shared pics yet, keep favor up">
<div class="phone-app-icon phone-app-icon-gallery">🖼️</div>
<span class="phone-app-name">Gallery</span>
</div>
<</if>>
<<if setup.classRankingUnlocked()>>
<a data-passage="Phone ranks" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-ranks">📊</div>
<span class="phone-app-name">Ranks</span>
</div>
</a>
<<elseif $world eq "anwo">>
<div class="phone-app phone-app-disabled" title="Provisional list not posted yet">
<div class="phone-app-icon phone-app-icon-ranks">📊</div>
<span class="phone-app-name">Ranks</span>
</div>
<</if>>
<a data-passage="Phone patreon" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-patreon" aria-hidden="true">P</div>
<span class="phone-app-name">Patreon</span>
</div>
</a>
<a data-passage="Phone recap" class="phone-app-link link-internal" tabindex="0">
<div class="phone-app">
<div class="phone-app-icon phone-app-icon-recap" aria-hidden="true">↺</div>
<span class="phone-app-name">Recap</span>
</div>
</a>
</div>
<<if _taskBadge gt 0>>
<p class="phone-home-hint"><<= setup.phoneTaskDueHint() || "Tasks has homework waiting.">></p>
<</if>>
<<if _snapBadge gt 0>>
<p class="phone-home-hint">New snap waiting.</p>
<</if>>
<<if _taskBadge lte 0 && _snapBadge lte 0 && _chatBadge gt 0>>
<p class="phone-home-hint">Unread chats.</p>
<<elseif _taskBadge lte 0 && _snapBadge lte 0 && _chatBadge lte 0>>
<p class="phone-home-hint">No new alerts.</p>
<</if>>
</div>
<div class="phone-shell-bottom">
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="phone-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Chats</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="chat-list">
<<set _new1 = !$flags.phone1Read>>
<<set _cls1 = _new1 ? "chat-row is-new" : "chat-row">>
<a data-passage="phone message 1" class="chat-link link-internal" tabindex="0">
<div @class="_cls1">
<img class="chat-avatar" @src="setup.ImagePath + 'girlfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">ANWO Project</span>
<<if _new1>><span class="chat-pill">new</span><</if>>
</div>
<div class="chat-row-preview"><<= $girlfriendName>>, <<= $bullyName>>, <<= $exfriendName>>, <<= $bestfriendName>></div>
</div>
</div>
</a>
<<if setup.phoneKeyholderMessagePending()>>
/* Jenny's proof message is a chat beat, so the Chats list carries it even when
quest guidance is off and the Home banner never renders. */
<a data-passage="Alpha proof phone" class="chat-link link-internal" tabindex="0">
<div class="chat-row is-new">
<img class="chat-avatar" @src="setup.ImagePath + 'girlfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name"><<print $girlfriendName>></span>
<span class="chat-pill">new</span>
</div>
<div class="chat-row-preview">Had a "study" thing. Then a parking lot photo.</div>
</div>
</div>
</a>
<</if>>
<<if $flags.day8Submitted>>
<<set _newResults = !$flags.resultsLiveSeen>>
<<set _clsResults = _newResults ? "chat-row is-new" : "chat-row">>
<a data-passage="phone results live" class="chat-link link-internal" tabindex="0">
<div @class="_clsResults">
<img class="chat-avatar" @src="setup.ImagePath + 'exfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">ANWO Project · update</span>
<<if _newResults>><span class="chat-pill">new</span><</if>>
</div>
<div class="chat-row-preview"><<= $exfriendName>>: results are live…</div>
</div>
</div>
</a>
<</if>>
<<if $flags.day35PublicHumiliationDone && !$flags.presentationTeaseRead && !$flags.finalRankingSeen>>
<<set _clsPresentation = "chat-row is-new">>
<a data-passage="phone presentation tease" class="chat-link link-internal" tabindex="0">
<div @class="_clsPresentation">
<img class="chat-avatar" @src="setup.ImagePath + 'bestfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">ANWO Project · presentation</span>
<span class="chat-pill">new</span>
</div>
<div class="chat-row-preview"><<= $bestfriendName>>: put my slide last 🤭</div>
</div>
</div>
</a>
<</if>>
<<if $flags.presentationTeaseRead && $flags.day37SlideDecision && !$flags.presentationPrepRead && !$flags.finalRankingSeen>>
<a data-passage="phone presentation prep" class="chat-link link-internal" tabindex="0">
<div class="chat-row is-new">
<img class="chat-avatar" @src="setup.ImagePath + 'bestfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">ANWO Project · presentation</span>
<span class="chat-pill">new</span>
</div>
<div class="chat-row-preview"><<= $bestfriendName>>: <<if $flags.day37SlideDecision eq "warn">>your approved deck survived 🙄<<else>>wait until you see the last slide 🤭<</if>></div>
</div>
</div>
</a>
<</if>>
<<if $flags.presentationPrepRead && $flags.day39RehearsalDone && !$flags.presentationMorningRead && !$flags.day40PresentationDone>>
<a data-passage="phone presentation morning" class="chat-link link-internal" tabindex="0">
<div class="chat-row is-new">
<img class="chat-avatar" @src="setup.ImagePath + 'girlfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name"><<= $girlfriendName>></span>
<span class="chat-pill">new</span>
</div>
<div class="chat-row-preview">wear the black shirt today and don't be late.</div>
</div>
</div>
</a>
<</if>>
<<if $flags.presentationMorningRead && !$flags.finalRankingSeen>>
<a data-passage="phone presentation morning" class="chat-link link-internal" tabindex="0">
<div class="chat-row">
<img class="chat-avatar" @src="setup.ImagePath + 'girlfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top"><span class="chat-row-name">ANWO Project · presentation</span></div>
<div class="chat-row-preview">Presentation-day instructions</div>
</div>
</div>
</a>
<</if>>
<<if $flags.googledSissy>>
<<set _new2 = !$flags.phone2Read>>
<<set _cls2 = _new2 ? "chat-row is-new" : "chat-row">>
<a data-passage="phone message 2" class="chat-link link-internal" tabindex="0">
<div @class="_cls2">
<img class="chat-avatar" @src="setup.ImagePath + 'phone/sissy1.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">Sissy research</span>
<<if _new2>><span class="chat-pill">new</span><</if>>
</div>
<div class="chat-row-preview">Group chat about the quiz…</div>
</div>
</div>
</a>
<</if>>
<<if $flags.day10Confessed || hasVisited("School 10 Day anwo")>>
<<set _new3 = !$flags.phone3Read>>
<<set _cls3 = _new3 ? "chat-row is-new" : "chat-row">>
<a data-passage="phone message 3" class="chat-link link-internal" tabindex="0">
<div @class="_cls3">
<img class="chat-avatar" @src="setup.ImagePath + 'bestfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">After the confession</span>
<<if _new3>><span class="chat-pill">new</span><</if>>
</div>
<div class="chat-row-preview">Drama in the group…</div>
</div>
</div>
</a>
<</if>>
<<if $caged>>
<<set _new4 = !$flags.phone4Read>>
<<set _cls4 = _new4 ? "chat-row is-new" : "chat-row">>
<a data-passage="phone message 4" class="chat-link link-internal" tabindex="0">
<div @class="_cls4">
<img class="chat-avatar" @src="setup.ImagePath + 'girlfriend/pp.webp'" alt="">
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name"><<= $girlfriendName>></span>
<<if _new4>><span class="chat-pill">new</span><</if>>
</div>
<div class="chat-row-preview">Private DM</div>
</div>
</div>
</a>
<</if>>
/* Caption pics deliver via Snap app, not Chats */
</div>
<div class="phone-shell-bottom">
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.presentationTeaseRead = true>>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
</div>
<div class="messages">
<<actor bestfriend>>
Rehearsal notes:
$bullyName opens. $exfriendName has the totals. $girlfriendName controls the deck.
$youName found the bad rows. Give him one field question and try to look surprised. 🤭
<</actor>>
<<actor bully>>
Works for me. He did the interviews, so let him answer one question.
Then take the mic away before he confesses to something else. 😂
<</actor>>
<<actor exfriend>>
Can we keep the Friday jokes out of the actual slides?
The council is going to see this.
<</actor>>
<<actor bestfriend>>
My slide goes last. 💅
The council gets the numbers. The group gets the key photo.
<</actor>>
<img class="centered" @src="setup.ImagePath+'story/owned/day40-presentation-rehearsal.jpg'" alt="Jenny rehearsing the final presentation at home">
<<actor bestfriend>>
Slide header attached. Do not send him the key photo. 🤭
<</actor>>
<<actor bully>>
Keep the private version out of the submitted deck. Funny is not worth losing the grade. 😂
<</actor>>
<<actor girlfriend>>
Photo from rehearsal. The layout looks fine.
$bestfriendName, stop writing his private life into my grade.
<</actor>>
<<actor bestfriend>>
Private? $bullyName knows, I know, and he stares at your key every lunch. 💀
Put the key photo beside the ranking. Same name on both.
<</actor>>
<<actor girlfriend>>
$youName, wear the black shirt on presentation day. bring the handouts and your corrected notes.
When the field question comes, answer it. Don't hand your work back to us.
How did the fountain part sound when you practised it? Tell me that one honestly. 😘
<</actor>>
<<actor-thought you>>
On presentation day, your field correction goes on the screen. $bestfriendName still has a private draft and access to the shared folder.
You put the phone down, then pick it up and read the messages from the beginning.
<</actor-thought>>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<<set $flags.presentationPrepRead = true>>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
</div>
<div class="messages">
<img class="centered" @src="setup.ImagePath+'story/owned/day37-hidden-slide.jpg'" alt="the rehearsal laptop with the unauthorized private slide">
<<if $flags.day37SlideDecision eq "warn">>
<<actor bestfriend>>
Deck update: $girlfriendName deleted the key slide and locked the deck.
She checked the approval log twice. 💀
<</actor>>
<<actor bully>>Good. Funny is not worth tanking the grade. 😂<</actor>>
<<actor exfriend>>The approval log matches the locked file. Leave it that way.<</actor>>
<<actor girlfriend>>
$youName, your corrected notes are still in the deck.
Bring the handouts and black shirt for presentation day. I will handle the upload. 😘
<</actor>>
<<actor-thought you>>The private edits are gone. Your field correction remains under your name.<</actor-thought>>
<<else>>
<<actor bestfriend>>
Deck update: His sample correction stays.
$youName gets one field line. My slide puts the key beside his name. 💀
<</actor>>
<<actor bully>>
Keep it in the chat, not the council upload. 😂
<</actor>>
<<actor bestfriend>>
Fine. The council gets the approved deck.
The key slide stays on my laptop. 🤭
<</actor>>
<<actor exfriend>>
Are we really putting all of that on a slide? The council sees these.
<</actor>>
<<actor bestfriend>>
The council already ranked him, $exfriendName. They can see the key beside his name.
If he hates it, he can object at the front. 💅
<</actor>>
<<actor girlfriend>>
$youName, don't read the group chat before bed.
Show up on presentation day with the handouts and a black shirt.
I'll handle the talking. You handle the printing and the not-clinking. 😘
<</actor>>
<<actor-thought you>>
Your field correction will sit under your name on the board.
The cage still aches when you picture $bestfriendName finding one more chance to load her private draft.
<</actor-thought>>
<</if>>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<<set $flags.presentationMorningRead = true>>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
</div>
<div class="messages">
<img class="centered" @src="setup.ImagePath+'story/owned/day40-class-arrival.jpg'" alt="the group preparing for presentation day">
<<actor girlfriend>>
Today: Black shirt, handouts in your bag.
Your corrected notes are in the deck. Answer the field question when I pass it to you. 😘
<</actor>>
<<actor bestfriend>>
<<if $flags.day37SlideDecision eq "warn">>The projector is ready. Your approved deck is locked.<<else>>The projector is ready. My slide is still in.<</if>>
Are you? 🤭
<</actor>>
<<actor bully>>
Field expert's big day. Never thought I would type that. 😂
Someone make sure $bestfriendName cannot edit after we start.
<</actor>>
<<actor girlfriend>>Nobody adds or photographs private material. This is a graded presentation.<</actor>>
<<actor bestfriend>>
I love calling this "documentation." 💀
<</actor>>
<<actor-thought you>>
You check the black shirt, the handouts, and the corrected notes. The cage is already tight against your thigh.
The field answer is yours. <<if $flags.day37SlideDecision eq "warn">>$girlfriendName locked the approved deck herself.<<else>>The edit-history photo on your phone is the only proof of what $bestfriendName changed.<</if>>
<</actor-thought>>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<<set _gReady = setup.goddessHomeworkReady()>>
<<set _eReady = setup.edgeReportReady()>>
<div class="phone-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Tasks</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-tasks-body">
<p class="phone-home-label">Keyholder assignments</p>
<p class="phone-home-hint">Edge: Mon & Wed · Clip: Tue & Thu</p>
<p class="phone-home-hint">Caption set: <<= setup.captionStoryProgressLabel()>> · clean Edge Report = next Snap</p>
<<if setup.isJennyTaskDay()>>
<p class="phone-home-hint">Today: <<= setup.jennyTaskDayLabel()>></p>
<<else>>
<p class="phone-home-hint">Next, <<= setup.jennyTaskDayLabel()>></p>
<</if>>
<<if _gReady>>
<a data-passage="Goddess homework" class="chat-link link-internal" tabindex="0">
<div class="chat-row is-new task-row">
<div class="chat-avatar tool-avatar">🎬</div>
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">Clip homework</span>
<span class="chat-pill">due</span>
</div>
<div class="chat-row-preview">Goddess clip · sound on · once each · rate 1–10</div>
</div>
</div>
</a>
<<elseif $flags.goddessPlaylistComplete>>
<div class="chat-row task-row task-done">
<div class="chat-avatar tool-avatar">✓</div>
<div class="chat-row-main">
<div class="chat-row-top"><span class="chat-row-name">Clip homework</span></div>
<div class="chat-row-preview">Playlist complete<<if setup.goddessBestClipIndex() neq null>> · #1 is clip <<= setup.goddessBestClipIndex()>><</if>></div>
</div>
</div>
<<elseif $caged && ($flags.keyRulesDone || $flags.nightOutSmellDone) && setup.genreHas("vesperina")>>
<div class="chat-row task-row">
<div class="chat-avatar tool-avatar">🎬</div>
<div class="chat-row-main">
<div class="chat-row-top"><span class="chat-row-name">Clip homework</span></div>
<div class="chat-row-preview"><<if setup.isJennyClipDay()>>Done for today<<else>>Tue & Thu only<</if>> · <<= setup.goddessClipsLeft()>> left</div>
</div>
</div>
<<else>>
<div class="chat-row task-row task-locked">
<div class="chat-avatar tool-avatar">🎬</div>
<div class="chat-row-main">
<div class="chat-row-top"><span class="chat-row-name">Clip homework</span></div>
<div class="chat-row-preview">Unlocks after cage + key rules</div>
</div>
</div>
<</if>>
<<if _eReady>>
<a data-passage="Edge report start" class="chat-link link-internal" tabindex="0">
<div class="chat-row is-new task-row">
<div class="chat-avatar tool-avatar">🔒</div>
<div class="chat-row-main">
<div class="chat-row-top">
<span class="chat-row-name">Edge Report</span>
<span class="chat-pill">due</span>
</div>
<div class="chat-row-preview">Mon & Wed · edge · phrase · streak</div>
</div>
</div>
</a>
<<elseif $caged && ($flags.keyRulesDone || $flags.nightOutSmellDone)>>
<div class="chat-row task-row">
<div class="chat-avatar tool-avatar">🔒</div>
<div class="chat-row-main">
<div class="chat-row-top"><span class="chat-row-name">Edge Report</span></div>
<div class="chat-row-preview"><<if setup.isJennyEdgeDay()>>Done for today<<else>>Mon & Wed only<</if>> · streak <<= $edgeStreak>></div>
</div>
</div>
<<else>>
<div class="chat-row task-row task-locked">
<div class="chat-avatar tool-avatar">🔒</div>
<div class="chat-row-main">
<div class="chat-row-top"><span class="chat-row-name">Edge Report</span></div>
<div class="chat-row-preview">Unlocks after cage + key rules</div>
</div>
</div>
<</if>>
<<if !_gReady && !_eReady>>
<<if setup.isJennyTaskDay()>>
<p class="phone-home-hint">Nothing open for today. <<= setup.jennyTaskDayLabel()>></p>
<<else>>
<p class="phone-home-hint">No due tasks. Edge: Mon/Wed · Clip: Tue/Thu.</p>
<</if>>
<</if>>
</div>
<div class="phone-shell-bottom">
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>>
/* Legacy name: overnight pings now live in Snap (include so content renders same turn) */<<nobr>>
<<include "Phone snap">>
<</nobr>><<nobr>>
/* Priority: bully pics first (independent of Jenny), then caption story, then overnight text.
Jamal must not wait behind a Jenny overnight ping. */
<<set _snapMore = (setup.bullySnapCount() + setup.captionUnreadCount() + ($flags.phoneOvernightPending ? 1 : 0))>>
<div class="phone-shell phone-snap-shell">
<div class="phone-shell-top phone-snap-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-snap-brand"><span class="phone-snap-ghost" aria-hidden="true">👻</span> Snap</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-snap-body">
<<if setup.bullySnapCount() gt 0>>
/* Bully hallway snaps first — not gated on Jenny */
<<set _bSnap = setup.popBullySnap()>>
<<if _bSnap>>
<<print setup.renderSnapThread("bully", _bSnap.text, _bSnap.imgUrl)>>
<<run setup.nudgeArousal(10)>>
<<else>>
<div class="phone-snap-empty"><div class="phone-app-icon phone-app-icon-snap phone-app-icon-snap-lg" aria-hidden="true">👻</div><p class="phone-home-label">No new snaps</p></div>
<</if>>
<<elseif setup.captionUnreadCount() gt 0>>
/* Jenny caption story (Edge Report obey) */
<<set _capId = setup.popCaptionUnread()>>
<<if _capId>>
<<run setup.unlockCaption(_capId)>>
<<set _snapText = setup.snapPicTag()>>
<<print setup.renderSnapThread("girlfriend", _snapText, setup.captionURL(_capId))>>
<<run setup.nudgeArousal(8)>>
<<else>>
<div class="phone-snap-empty"><div class="phone-app-icon phone-app-icon-snap phone-app-icon-snap-lg" aria-hidden="true">👻</div><p class="phone-home-label">No new snaps</p></div>
<</if>>
<<elseif $flags.phoneOvernightPending>>
/* Text overnight (Jenny / Alessia) after pic queues */
<<set $flags.phoneOvernightPending = false>>
<<set $flags.phoneOvernightRead = true>>
<<set _snap = setup.pickOvernightSnap()>>
<<print setup.renderSnapThread(_snap.role, _snap.text, _snap.imgUrl)>>
<<if $caged>>
<<run setup.nudgeArousal(8)>>
<</if>>
<<else>>
<div class="phone-snap-empty"><div class="phone-app-icon phone-app-icon-snap phone-app-icon-snap-lg" aria-hidden="true">👻</div><p class="phone-home-label">No new snaps</p></div>
<</if>>
<<set _snapLeft = setup.bullySnapCount() + setup.captionUnreadCount() + ($flags.phoneOvernightPending ? 1 : 0)>>
<<if _snapLeft gt 0>>
<div class="phone-snap-more">
<a data-passage="Phone snap" class="phone-snap-next link-internal" tabindex="0">Next · <<= _snapLeft >> left</a>
</div>
<</if>>
</div>
<div class="phone-shell-bottom phone-snap-bottom">
<a data-passage="Phone" class="link-internal" tabindex="0">Apps</a>
<a data-passage="Home" class="link-internal" tabindex="0">Close</a>
</div>
</div>
<</nobr>>
/* Legacy: caption DMs used to open here → Snap */<<nobr>>
<<include "Phone snap">>
<</nobr>><<nobr>>
<<run setup.applyFavorGalleryBonus()>>
<<run setup.ensureGalleryState()>>
/* Album only — new pics open in Snap (do not clear captionUnread here) */
<div class="phone-shell phone-gallery-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Gallery</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-gallery-body">
<<if ($gallery || []).length gt 0>>
<p class="phone-gallery-count"><<= ($gallery || []).length >> photo<<= ($gallery || []).length gt 1 ? "s" : "">></p>
<div class="phone-gallery-grid">
<<for _gi = 0; _gi lt $gallery.length; _gi++>>
<<set _gid = $gallery[_gi]>>
<<set _gmeta = setup.captionMeta(_gid)>>
<<set _gtitle = _gmeta ? _gmeta.title : _gid>>
<<set _gurl = setup.captionURL(_gid)>>
<<capture _gid, _gurl, _gtitle>>
<div class="phone-gallery-cell"><<print '<img class="phone-gallery-thumb" src="' + _gurl + '" alt="">'>><<link `"Open " + _gtitle` "Phone gallery view">><<set $galleryViewId = _gid>><</link>></div>
<</capture>>
<</for>>
</div>
<<else>>
<div class="phone-gallery-empty">
<p class="phone-home-label">No photos</p>
<p class="phone-home-hint">Clean Edge Reports unlock $girlfriendName's caption set as Snaps. They save here.</p>
</div>
<</if>>
</div>
<div class="phone-shell-bottom">
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>><<nobr>>
<<run setup.ensureGalleryState()>>
<<if !$galleryViewId || !setup.captionMeta($galleryViewId)>>
<div class="phone-shell"><div class="phone-shell-body"><p class="phone-empty">This photo isn't available.</p><div class="phone-footer"><<link "Apps" "Phone">><</link>><<link "Gallery" "Phone gallery">><</link>></div></div></div>
<<else>>
<<set _gmeta = setup.captionMeta($galleryViewId)>>
<<set _gurl = setup.captionURL($galleryViewId)>>
<div class="phone-shell phone-gallery-shell phone-gallery-view-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Photo</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-gallery-view-body">
<<print '<img class="phone-gallery-full" src="' + _gurl + '" alt="">'>>
<<if _gmeta>>
<p class="phone-gallery-view-title"><<= _gmeta.title>></p>
<</if>>
</div>
<<set $aroused = $aroused gte 95 ? 100 : $aroused + 5>>
<div class="phone-shell-bottom">
[[Gallery|Phone gallery]]
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<run setup.markClassRankingSeen()>>
<<set _rank = setup.getClassRanking()>>
<div class="phone-shell phone-ranks-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Ranks</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-ranks-body">
<<if !_rank.unlocked>>
<p class="phone-home-hint">No provisional list yet. Council hasn't posted.</p>
<<else>>
<<include "Class rank list body">>
<p class="phone-home-hint">Public recognition. Same list on the school board.</p>
<</if>>
</div>
<div class="phone-shell-bottom">
[[See school board|Class board]]
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="phone-shell phone-patreon-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Patreon</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-patreon-body">
<div class="phone-patreon-hero">
<div class="phone-app-icon phone-app-icon-patreon phone-app-icon-patreon-lg" aria-hidden="true">P</div>
</div>
<p class="phone-home-label">Support the game</p>
<p class="phone-home-hint">v<<= setup.GAME_VERSION>>: builds land on Patreon first.</p>
<ul class="phone-patreon-bullets">
<li>New builds for paid tiers before free mirrors</li>
<li>Bug reports get priority by tier</li>
<li>Public demos stay free later</li>
</ul>
<<if setup.SUPPORTER_CREDITS && setup.SUPPORTER_CREDITS.length>>
<section class="phone-supporter-credits">
<div class="phone-supporter-heading">
<div>
<p class="phone-supporter-eyebrow">Community credits</p>
<p class="phone-supporter-title">Patreon contributors</p>
</div>
<span class="phone-supporter-count"><<= setup.SUPPORTER_CREDITS.length>></span>
</div>
<p class="phone-home-hint phone-supporter-thanks">Thank you for helping fund the next chapter.</p>
<<= setup.supporterCreditsHTML()>>
</section>
<</if>>
<p class="phone-home-label">Clip credit</p>
<p class="phone-home-hint">Clip homework shoutout: <strong><<= setup.VESPERINA_CREDIT>></strong>. Some AI clips in that pack are built from her work. Local files only, not hotlinked.</p>
<p class="phone-home-hint">Opens in your browser (real site, not in-game).</p>
<div class="phone-patreon-actions">
<<link "Open Patreon">><<run setup.openPatreon()>><</link>>
<<link "Goddess Vesperina">><<run setup.openVesperina()>><</link>>
</div>
<p class="phone-home-label">Bugs and saves</p>
<p class="phone-home-hint">Build v<<= setup.GAME_VERSION>>. Say which passage you were in and what you expected instead. Export the save first: it carries the day, the flags, and the route, so a fix does not need guesses. Saves from older builds still load.</p>
<div class="phone-patreon-actions">
<<link "Export this save to a file">><<run Save.export()>><</link>>
<<link "Open the Saves menu">><<run UI.saves()>><</link>>
<<if setup.DISCORD_URL>>
<<link "Community">><<run setup.openDiscord()>><</link>>
<</if>>
</div>
</div>
<div class="phone-shell-bottom">
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>>
/* Returning players: one screen for where the run stands. Bug reporting lives in Patreon. */<<nobr>>
<<set _recap = setup.storyRecap()>>
<div class="phone-shell">
<div class="phone-shell-top">
<span class="phone-shell-time"><<print $gameDate.getHours()>>:00</span>
<span class="phone-shell-title">Story so far</span>
<span class="phone-shell-icons" aria-hidden="true">▮▮▮</span>
</div>
<div class="phone-recap-body">
<p class="phone-home-label">This save</p>
<<for _line range _recap>>
<p class="phone-recap-line"><<= _line>></p>
<</for>>
<p class="phone-home-hint">Built from your flags and choices. Nothing here is a preview of what comes next.</p>
</div>
<div class="phone-shell-bottom">
[[Home screen|Phone]]
<<set _phoneClose = setup.phoneCloseDestination()>><<link "Close" _phoneClose>><<set $phoneOrigin = "">><</link>>
</div>
</div>
<</nobr>><<nobr>>
<<set $flags.resultsLiveSeen = true>>
<<set $flags.questHint = "">>
<div class="phone" id="filterSuper">
<div class="topHeader">
<div>
<span id="timeCurrent"><<print $gameDate.getHours() + ':00'>> </span>
<i class="fa-brands fa-whatsapp fa-xl"></i>
</div>
</div>
<div class="messages">
<<include "ANWO results live chat">>
</div>
<section class="phone-nav">
<a data-passage="Phone chats" class="phone-back-btn link-internal">Chats</a>
</section>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day8-results-table.jpg'" alt="The council's project summary shared in the chat">
<<actor exfriend>>
The council posted a summary. Same totals as our file, shorter methods section.
<</actor>>
<<if $flags.surveyCaveatSubmitted is true>>
<<actor you>>Where's the last page? The one about the forum sample?<</actor>>
<<actor exfriend>>It's in the PDF we submitted. It isn't in this summary. I've kept the upload receipt.<</actor>>
<<actor girlfriend>>Bring both copies to class. Ask which one they read.<</actor>>
<<elseif $flags.surveyCaveatSubmitted is false>>
<<actor you>>They've used the summary as it was. There's nothing about who answered online.<</actor>>
<<actor exfriend>>We can still explain the method. The raw table has the source column.<</actor>>
<<actor girlfriend>>Bring the table. If you're going to ask about it, use the actual numbers.<</actor>>
<<else>>
<<actor you>>Do we know which attachments they received?<</actor>>
<<actor exfriend>>I can check the upload record at school. This is only their summary.<</actor>>
<</if>>
<<actor bestfriend>>
Put the table in your own bag. $girlfriendName isn't your filing cabinet.
<</actor>>
<<actor bully>>
Is there a grade on it or just our names?
<</actor>>
<<actor girlfriend>>
Just our names. Put your interview sheet in your bag. All of you.
<</actor>>
<<actor-thought you>>
They've put the graph under our names. I need to know what they're using it for.
<</actor-thought>>
<</nobr>><<nobr>>
<<set $flags.googledSissy = true>>
<<set $flags.questHint = "">>
<p class="delayed">The first result gives you a definition: an insult in some contexts, an adult role label in others. The image tab shows men in skirts, stockings, and makeup. None of it explains the council's assessment criteria.</p>
<div class="delayed">
<img @src="setup.ImagePath+'phone/sissy1.webp'" class="hero-img centered" alt="An illustration in the definition search">
</div>
<div class="delayed">
<img @src="setup.ImagePath+'phone/sissy2.jpeg'" class="centered">
</div>
<<actor-thought you>>
I needed the definition, but this still doesn't tell me what she expects. I'll ask whether the others understood the sheet.
<</actor-thought>>
[[Home screen|Phone]]
[[Chats|Phone chats]]
<</nobr>><<nobr>>
<<set $flags.mallRiskDone = true>>
<img class="centered" @src="setup.ImagePath+'places/mall.png'">
<p class="delayed">
Inside the changing room, you reach through your jeans and adjust the cage out of habit.
Then you notice the curtain has slipped several inches open.
</p>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'"><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">You good in there? Need a different size or...?</span></div></div>
<<actor-thought you>>
The cage scrapes against the denim. Your fingers miss the zipper once. If the clerk pulls the curtain aside, they will see exactly how ANWO has changed your private life.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I am fine! Just... shoe.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'"><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">Uh-huh. Take your time, man.</span></div></div>
<<actor-thought you>>
Maybe they saw and decided not to say anything. Your hands keep shaking long after you leave the changing room.
<</actor-thought>>
<<run setup.nudgeArousal(8)>>
<div class="delayed">[[Leave the store|Mall]]</div>
<</you-choice>>
<<you-choice "Freeze. Say nothing.">>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'stores/xxx-store.webp'"><div><span class="name-container"><span class="name">Clerk</span></span><span class="content">...Okay. Weird energy. I will be at the counter.</span></div></div>
<<run setup.nudgeArousal(10)>>
<div class="delayed">[[Escape to mall hall|Mall]]</div>
<</you-choice>>
</div>
<</nobr>><<nobr>>
<<set $flags.schoolKeyRiskDone = true>>
<<run setup.applyRecognition("owned-school-key-flash")>>
<p class="delayed">
Hallway crush before second period. $girlfriendName digs in her bag for lip gloss.
The key on her ring catches light, small, silver, unmistakable if you know what you are looking at.
</p>
<<actor bestfriend>>
Cute keychain. New?
Wait... is that for *him*?
<</actor>>
<<actor girlfriend>>
Mm. Someone has to be responsible for him.
<</actor>>
<<if setup.isEager()>>
<<actor-thought you>>
You want them to figure it out. Heat climbs your neck when $bestfriendName's eyes move from the key to your jeans.
<</actor-thought>>
<<elseif setup.isResist()>>
<<actor-thought you>>
You want to snatch it. You do not. Your jaw hurts from not speaking.
<</actor-thought>>
<<else>>
<<actor-thought you>>
You smile and nod and say it is a locker key. Then you wait for the bell to end the conversation.
<</actor-thought>>
<</if>>
<<actor bully>>
You look like you're about to pass out. You good, man?
<</actor>>
<<actor you>>
Fine.
<</actor>>
<<actor bestfriend>>
He is definitely not fine. Look at him. This is better than TV.
<</actor>>
<<actor girlfriend>>
He is fine. I manage him. Don't help, $bestfriendName.
<</actor>>
<<actor bestfriend>>
I'm not helping. I just want everyone to see his face.
<</actor>>
<<run setup.nudgeArousal(8)>>
<div class="delayed">
[[To class|School]]
</div>
<</nobr>><<nobr>>
<<set $flags.phoneLeakScareDone = true>>
<<actor sister>>
Sleep well, or did the cage keep pinching?
<</actor>>
<<actor sister>>
Reminder: I still have those panty pics. Group chat would die. $girlfriendName would... actually she might thank me.
Be useful. Stay cute. Do not test me this week.
<</actor>>
<<if setup.isResist()>>
<<actor-thought you>>
She smiles while threatening you. You remember every word for the next time she asks for a favor.
<</actor-thought>>
<<else>>
<<actor-thought you>>
Your stomach drops. Doing what she asks is easier than having those photos sent around school.
<</actor-thought>>
<</if>>
<div class="delayed">
[[Home]]
</div>
<</nobr>><<nobr>>
<<set _rank = setup.getClassRanking()>>
<<if !_rank.unlocked>>
<p class="hint-line">No list yet. Council hasn't posted names.</p>
<<else>>
<div class="class-rank-block">
<p class="class-board-heading"><<= _rank.title>></p>
<p class="hint-line class-rank-note"><<= _rank.note>></p>
<div class="class-rank-table" role="list">
<<for _ri = 0; _ri lt _rank.rows.length; _ri++>>
<<set _row = _rank.rows[_ri]>>
<div role="listitem" @class="'class-rank-row' + (_row.isYou ? ' is-you' : '') + (_row.isAlpha ? ' is-alpha' : ' is-beta')"><span class="class-rank-num">#<<= _row.rank>></span><span class="class-rank-name"><<= _row.name>><<if _row.isYou>> <em>(you)</em><</if>><<if _row.tag neq "">> <span class="class-rank-tag"><<= _row.tag>></span><</if>></span><span class="class-rank-band"><<= _row.band>></span></div>
<</for>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<run setup.markClassRankingSeen()>>
<div class="scene-panel compact class-board-panel">
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/class-rank-board.jpg'" alt="Alpha Beta ranking board">
<h2 class="scene-title">Ranking board</h2>
<p class="scene-lead">Posted by the office. This is public recognition, based on what the council records and everyone sees.</p>
<<include "Class rank list body">>
<div class="hub-actions">
<<if setup.isSchoolHours()>>
[[Go to class|School]]
<</if>>
[[Leave campus|After school]]
<<if setup.classRankingUnlocked()>>
[[Phone copy|Phone ranks]]
<</if>>
[[Home]]
</div>
</div>
<</nobr>><<nobr>>
<<if $schoolDay lte 1 && !$flags.normalSchoolIntroSeen && !hasVisited("relationshipState-initial")>>
<<include "relationshipState-initial">>
<<elseif $schoolDay lte 2>>
<<include "relationshipState-known">>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school exterior">
<p class="scene-lead">You have no new assignment to work on. That unread message is still on your computer at home.</p>
<div class="continue-links">[[Go home to the computer|Computer]]</div>
<</if>>
<</nobr>><<nobr>>
<div id="conv">
<<set $passageName = 'relationshipState-' + $relationshipState>>
<<if $relationshipState eq "initial-anwo" && !$flags.anwoSchoolIntroSeen && !hasVisited("relationshipState-initial-anwo")>>
<<include "relationshipState-initial-anwo">>
<<elseif $relationshipState neq "initial-anwo" && tale.has($passageName) && !hasVisited($passageName)>>
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school exterior">
<p class="scene-lead">$girlfriendName catches your arm before you reach the classroom.</p>
<div class="continue-links">[[Continue|$passageName]]</div>
<<elseif $caged && !$flags.schoolKeyRiskDone && $schoolDay gte 25 && random(1, 2) eq 1>>
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="The school entrance">
[[Continue|Risk school key flash]]
<<else>>
<<run setup.nudgeArousal(8)>>
<img @src="setup.ImagePath+'school/gf'+ random(1, 5) +'.jpeg'" class="centered">
<<if $flags.wearingUsedPanty && $caged>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/hustles/used-panty-worn.jpg'" alt="her panties under school clothes">
<<actor-thought you>>
Her used pair from his night sits under your clothes. With every step, the fabric rubs against the cage and brings the assignment back to mind.
<</actor-thought>>
<<if $girlfriendTrustLevel gte 6>>
<<actor girlfriend>>
Walk normal.
I know what you're wearing.
<</actor>>
<<else>>
<<actor girlfriend>>
Those stay on.
Fidget and I'll notice.
<</actor>>
<</if>>
<<run setup.nudgeArousal(8)>>
<</if>>
<<if $backpack.has("apology-gift") && !$flags.giftDelivered>>
<<actor you>>Hey... I got you something.<</actor>>
<<actor girlfriend>>Oh? Bribery before first period?<</actor>>
<p class="delayed">She opens the black box, runs a thumb over the silver bracelet, then slips it into her bag with a small smile.</p>
<<if $caged>>
<<actor girlfriend>>Thank you, baby. Keep this up and maybe I let you out a little longer next time.<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 2)>>
<<else>>
<<actor girlfriend>>Thanks, honey. You're sweet when you try.<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<</if>>
<<drop $backpack "apology-gift" 1>>
<<set $flags.giftDelivered = true>>
<<elseif $aroused gte 70>>
<<actor you>>Morning...$girlfriendName... I, uh, I missed you. A lot.<</actor>>
/* High arousal still respects GF favor, zero favor ≠ soft "baby" */
<<if $caged && $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>I can tell. Your face is red and you're staring again. Don't cling to me. Get to class. /* prose-ok: Jenny's spoken dismissal, the repetition is her point */<</actor>>
<<elseif $caged && $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>I can see it. The cage isn't fixing that part of your brain. Class first.<</actor>>
<<elseif $caged>>
<<actor girlfriend>>Easy, baby. Save that little flush for after school.<</actor>>
<<elseif $girlfriendTrustLevel lte 3>>
<<actor girlfriend>>You're flushed and weird. Don't make it my problem. Go.<</actor>>
<<elseif ($alphaBeta || 0) gte 4>>
<<actor girlfriend>>You're practically vibrating. Try to hold it together until we're out of the hallway.<</actor>>
<<else>>
<<actor girlfriend>>Whoa, easy. Save that energy for later, okay?<</actor>>
<</if>>
<<elseif $caged>>
/* Girlfriend favor: high = soft keyholder, low = cold keyholder */
<<if $girlfriendTrustLevel lte 3>>
<<actor you>>Morning...<</actor>>
<<actor girlfriend>>Walk. Don't talk. Don't make me explain the cage to anyone.<</actor>>
<<elseif setup.isEager()>>
<<actor you>>Morning... still locked for you.<</actor>>
<<if $girlfriendTrustLevel gte 7>>
<<actor girlfriend>>I know. I checked the key this morning. Don't embarrass me.<</actor>>
<<else>>
<<actor girlfriend>>Still locked. Still mine. Have a good day.<</actor>>
<</if>>
<<elseif setup.isResist()>>
<<actor you>>Morning. The... thing is still on.<</actor>>
<<if $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>That face again. The cage stays on. /* prose-ok: spoken, she is repeating yesterday's face */<</actor>>
<<else>>
<<actor girlfriend>>Save that face for my room. It stays on either way.<</actor>>
<</if>>
<<else>>
<<set $randomResponse = random(1, 3)>>
<<switch $randomResponse>>
<<case 1>>
<<actor you>>Morning, love. The... thing is still on.<</actor>>
<<if $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>Mm. Still locked, key still mine. Don't test me today.<</actor>>
<<elseif $cageAcceptance eq "reluctant">>
<<actor girlfriend>>I know. You agreed. Hold that today.<</actor>>
<<else>>
<<actor girlfriend>>Mm-hmm. Key's with me. Have a good day.<</actor>>
<</if>>
<<case 2>>
<<actor girlfriend>>Walk normal. Nobody needs to know what's under your clothes except me.<</actor>>
<<actor you>>I am walking normal...<</actor>>
<<if $girlfriendTrustLevel gte 7>>
<<actor girlfriend>>You're walking like everyone can tell. Relax. See you later.<</actor>>
<<else>>
<<actor girlfriend>>You're walking like a secret. Fix it. See you later.<</actor>>
<</if>>
<<case 3>>
<<actor you>>Have a wonderful day, babe.<</actor>>
<<if $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>Behave today. I'm still watching you.<</actor>>
<<else>>
<<actor girlfriend>>You too. Be good for me.<</actor>>
<</if>>
<</switch>>
<</if>>
<<elseif $girlfriendTrustLevel lte 5>>
<<actor you>>Morning, sweetheart...<</actor>>
<<actor girlfriend>>Morning. Don't make me regret keeping you. We'll talk later.<</actor>>
<<elseif ($alphaBeta || 0) gte 4>>
<<set $randomResponse = random(1, 2)>>
<<switch $randomResponse>>
<<case 1>>
<<actor you>>Good morning, love.<</actor>>
<<actor girlfriend>>Morning, soft boy. Try not to melt before lunch.<</actor>>
<<case 2>>
<<actor girlfriend>>There's my helpful boyfriend. Keep being useful today, okay?<</actor>>
<<actor you>>I... yeah. Of course. /* prose-ok: nervous speech */<</actor>>
<</switch>>
<<else>>
<<set $randomResponse = random(1, 4)>>
<<switch $randomResponse>>
<<case 1>>
<<actor you>>Morning, love. I'll text you after class.<</actor>>
<<actor girlfriend>>You better. I'll miss you.<</actor>>
<<case 2>>
<<actor you>>Morning, sweetheart. Can we do something together soon?<</actor>>
<<actor girlfriend>>Yeah, let's plan it later. See you.<</actor>>
<<case 3>>
<<actor you>>Have a good day, love. Kiss for later.<</actor>>
<<actor girlfriend>>Kiss back. See you tomorrow?<</actor>>
<<case 4>>
<<actor you>>Have a good day, babe. I already miss you a little.<</actor>>
<<actor girlfriend>>A little? Rude. I'll miss you too.<</actor>>
<</switch>>
<</if>>
/* Big tease only when ranks just changed (new stage since last view) */
<<if setup.classRankingHasUpdate()>>
<div class="quest-banner class-board-tease">
<strong>Ranking board updated</strong>
<p>The office list moved, drawing a cluster of students who no longer pretend they aren't looking.</p>
[[Check the ranking board|Class board]]
</div>
<</if>>
/* School-day paid hustles: before class (bags / used panties) */
<<if setup.hustleHubOpen() && setup.hustleGlobalReady()>>
<<set _mHustles = setup.hustleOpenSchoolList("morning")>>
<<if _mHustles.length gt 0>>
<p class="delayed hint-line">Before class, someone wants a “favor.” Cash if you play along.</p>
<div class="continue-links">
<<for _mi = 0; _mi lt _mHustles.length; _mi++>>
<<set _mh = _mHustles[_mi]>>
<<capture _mh>>
<<link `"Before class: " + _mh.title + " ($" + _mh.pay + ")"` _mh.passage>>
<<set $flags.hustleFromSchool = "morning">>
<</link>>
<</capture>>
<</for>>
<<if setup.classRankingHasUpdate()>>[[Ranking board (updated)|Class board]]<</if>>
<<link "Just go to class" setup.schoolClassTarget()>><<run setup.beginSchoolClass()>><</link>>
</div>
<<else>>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>[[Ranking board (updated)|Class board]]<</if>>
<<link "Go to class" setup.schoolClassTarget()>><<run setup.beginSchoolClass()>><</link>>
</div>
<</if>>
<<else>>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>[[Ranking board (updated)|Class board]]<</if>>
<<link "Go to class" setup.schoolClassTarget()>><<run setup.beginSchoolClass()>><</link>>
</div>
<</if>>
<</if>></div>
<</nobr>><<nobr>>
<<masteraudio stop>>
/* Resolve the earliest incomplete authored milestone, regardless of an old save's day counter. */
<<set _lateMilestone = setup.nextLateSchoolMilestone()>>
<<set _catchup = _lateMilestone ? _lateMilestone.passage : "">>
/* Alpha-route hallway beats belong to campus, so the player can finish them from
inside the school day instead of only from the Home banner. */
<<set _schoolLead = setup.schoolLeadAction()>>
<<if _schoolLead neq null>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school corridor">
<p class="scene-lead">Something is waiting in the corridor before you leave campus.</p>
<div class="continue-links">
<<link _schoolLead.label _schoolLead.passage>><<run setup.capturePhoneOrigin("School", _schoolLead.passage)>><</link>>
[[Home]]
</div>
</div>
<<elseif _catchup neq "">>
<<set _catchupLabel = _lateMilestone.direct ? "Hear the council result" : "Continue the school day">>
<div class="scene-panel compact">
<p class="scene-lead"><<if _lateMilestone.direct>>The council result is still waiting before you leave.<<else>>An unfinished school milestone is waiting for this save.<</if>></p>
<div class="continue-links"><<link _catchupLabel _catchup>><<set $schoolDay = Math.max($schoolDay || 0, (_lateMilestone.day || 0) + 1)>><</link>></div>
</div>
<</if>>
<<set _keyWeekSchool = _catchup eq "" ? setup.alessiaKeySchoolPassage() : "">>
/* The settled No-Alpha route keeps ordinary school playable without entering Alpha-dependent Days 35-40. */
<<if _keyWeekSchool neq "">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school exterior">
<p class="scene-lead">A scheduled conversation is waiting before the ordinary school loop.</p>
<div class="continue-links"><<link "Continue the school day" _keyWeekSchool>><</link>></div>
</div>
<<elseif _catchup eq "" && setup.projectArchiveReady()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/school-week-loop-classroom.jpg'" alt="The class preparing its project archive">
<p class="scene-lead">The project archive still needs your source notes. The group is waiting to settle who checks the final copy.</p>
<div class="continue-links">[[Settle the project follow-up|Project Archive Followup]]</div>
</div>
<<elseif _catchup eq "" && $world eq "anwo" && $schoolDay gte 35 && $flags.noAlphaBoundary && $flags.noAlphaRelationshipDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school exterior">
<p class="scene-lead">The project group moves on without turning your relationship boundary into another presentation. Ordinary classes continue.</p>
<div class="continue-links">[[Continue the school week|School week loop]]</div>
</div>
/* Do not let late presentation beats outrun the permanent-rules morning. */
<<elseif _catchup eq "" && $world eq "anwo" && $schoolDay gte 35 && !$flags.ownedMorningAfterDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school exterior">
<p class="scene-lead">The final project meetings have moved ahead, but $girlfriendName's permanent rules are still waiting at home. Finish that morning before the late presentation sequence continues.</p>
<div class="continue-links">[[Go home|Home]]</div>
</div>
/* Jump past empty calendar days so every school visit is a real beat */
<<elseif _catchup eq "">>
<<set _startDay = $schoolDay>>
<<set $schoolDay = setup.nextStorySchoolDay($world, $schoolDay)>>
<<set _gapDays = $schoolDay - _startDay>>
<<set $passageName = 'School ' + $schoolDay + ' Day ' + $world>>
<<if tale.has($passageName)>>
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="school exterior">
<p class="scene-lead">Another school day. The hallways hum with the same energy.</p>
/* Late gaps take the weekly loop one day at a time; the longer Act I runs fold into a summary. */
<<if _gapDays gt 1 && $world eq "anwo" && $schoolDay gte 26>>
<<set $schoolDay = _startDay>>
<div class="continue-links">[[School week loop|School week loop]]</div>
<<elseif _gapDays gte 3 && $world eq "anwo">>
<<set $schoolDay = _startDay>>
<div class="continue-links">[[The quiet days|School quiet days]]</div>
<<else>>
<div class="continue-links">[[Continue|$passageName][$schoolDay += 1]]</div>
<</if>>
<<else>>
<img @src="setup.ImagePath+'you/bored'+ random(1, 3) +'.jpeg'" class="centered">
<<if $world eq "anwo">>
<<if $flags.finalRankingSeen && $schoolDay gte 40>>
<p class="scene-lead">The project cycle is over, but school and its live rankings continue.</p>
<div class="continue-links">[[Continue the school week|School week loop]]</div>
<<else>>
<p>No new lectures today, the hierarchy already took attendance in your head.</p>
<<set $schoolDay += 1>>
/* Quiet day still ends via After school (shoe / afternoon gigs) */
<div class="continue-links">[[Leave school|After school]]</div>
<</if>>
<<else>>
/* Normal world after day 2: no more real school beats. Funnel back to the mail door. */
<p class="scene-lead">Hallways feel copied. Same lockers. Same almost-wave that never lands.</p>
<<actor-thought you>>
Nothing changes. You walk the same halls, watch the same couple leave together, and come home with nothing to show for it.
That weird mail on your computer is the only thing that does not fit.
<</actor-thought>>
<<set $schoolDay += 1>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 6)>>
<div class="continue-links">
[[Go home to the Computer|Computer]]
[[Just go home|Home]]
</div>
<</if>>
<</if>>
<</if>>
/* Shared after-class beat: time jump + optional afternoon hustles (Alessia shoe, etc.) */
<</nobr>><<nobr>>
<<run setup.finishSchoolDay()>>
<div class="scene-panel compact">
<img class="hero-img" @src="setup.ImagePath+'places/school.jpg'" alt="School exterior">
<h2 class="scene-title">After school</h2>
<p class="scene-lead"><<if $gameDate.getHours() gte 18>>The classrooms are dark. You check the noticeboard by the gate before heading home.<<else>>Students gather on the steps outside campus. You have the afternoon to yourself.<</if>></p>
<<if setup.hustleHubOpen() && setup.hustleGlobalReady()>>
<<set _aHustles = setup.hustleOpenSchoolList("afternoon")>>
<<if _aHustles.length gt 0>>
<p class="hint-line">Someone wants a favor before you leave. Cash if you play along. Or just go.</p>
<div class="hub-actions">
<<for _ai = 0; _ai lt _aHustles.length; _ai++>>
<<set _ah = _aHustles[_ai]>>
<<capture _ah>>
<<link `"After school: " + _ah.title + " ($" + _ah.pay + ")"` _ah.passage>>
<<set $flags.hustleFromSchool = "afternoon">>
<</link>>
<</capture>>
<</for>>
<<if setup.classRankingHasUpdate()>>[[Ranking board (updated)|Class board]]<</if>>
[[Home]]
</div>
<<else>>
<div class="hub-actions">
<<if setup.classRankingHasUpdate()>>[[Ranking board (updated)|Class board]]<</if>>
[[Home]]
</div>
<</if>>
<<else>>
<div class="hub-actions">
<<if setup.classRankingHasUpdate()>>[[Ranking board (updated)|Class board]]<</if>>
[[Home]]
</div>
<</if>>
</div>
<</nobr>>
/* Shared exit after school-linked side hustles */<<nobr>>
<<if $flags.hustleFromSchool eq "morning">>
<<set $flags.hustleFromSchool = "">>
<div class="delayed continue-links">[[Continue to class|School]]</div>
<<elseif $flags.hustleFromSchool eq "afternoon">>
<<set $flags.hustleFromSchool = "">>
<div class="delayed continue-links">
[[Home]]
</div>
<<else>>
<div class="delayed continue-links">[[Home]]</div>
<</if>>
<</nobr>><<nobr>>
<div id="conv">
<<actor you>>Excuse?<</actor>>
<<actor bully>>
Yeah. It was a little bitter. You didn't taste it yet? I figured you might like it.
<</actor>>
<<actor you>>What?<</actor>>
<<actor girlfriend>>
A chocolate! Yeah... he gave me one for you yesterday.
<</actor>>
<<if $flags.noticedSmell>>
<<actor-thought you>>
The bitter taste went from him to her and then into your mouth. The whole timeline turns like a knife.
<</actor-thought>>
<<else>>
<<actor-thought you>>
$bullyName is smiling too wide. $girlfriendName's smile is perfect and wrong.
<</actor-thought>>
<</if>>
</div>
<span id='options'>
<<you-choice "Really? Can I have it?">>
<<actor girlfriend>>
Yeees, but I forgot it at home. How about I bring it tonight?
Or better, we continue where we left off yesterday?
<</actor>>
[[Sounds good to me 😏|School][$strokeState = "before-second-time-caught"; $aroused = 90]]
<</you-choice>>
<<you-choice "Keep it. I don't like chocolate.">>
<<actor girlfriend>>
Oh. Okay. I know something else you might like.
How about we continue where we left off yesterday?
<</actor>>
[[Sounds good to me 😏|School][$strokeState = "before-second-time-caught"; $aroused = 90]]
<</you-choice>>
<<if $flags.noticedSmell>>
<<you-choice "That wasn't chocolate.">>
<<actor girlfriend>>
Don't be gross in the hallway. Tonight. We'll talk with our mouths busy.
<</actor>>
<<actor bully>>
Relax, man, it's mostly a joke.
<</actor>>
[[School|School][$strokeState = "before-second-time-caught"; $aroused = Math.min(92, Math.max($aroused, 80)); $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)]]
<</you-choice>>
<</if>>
</span>
<</nobr>><<nobr>>
<<set $flags.anniversaryTonight = true>>
<<run setup.peakArousal()>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/anniversary-fountain.jpg'" alt="anniversary at the fountain">
<<actor girlfriend>>Hey, don't forget our anniversary at the fountain after school.<</actor>>
<<actor girlfriend>>I waited a whole year for a night that isn't homework and group chat. Tonight gets spicy. Don't make me wait alone.<</actor>>
<<actor-thought you>>
She said it soft, but her eyes said don't mess this up.
<</actor-thought>>
<<actor you>>I'll be there. Promise.<</actor>>
<<actor girlfriend>>Good. Dress nice, or at least try. I am not telling you what spicy means before class.<</actor>>
<div class="continue-links">[[Go to class|School]]</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'places/school.jpg'" alt="The school entrance on the first ANWO morning">
<p class="scene-lead">$girlfriendName is waiting by the school gate. When she sees you, she pockets her phone and reaches for your hand.</p>
<<actor girlfriend>>There you are. I thought you were going to leave me out here.<</actor>>
<<actor you>>You were waiting for me?<</actor>>
<<actor girlfriend>>Who else? Your hand's freezing.<</actor>>
<p>She rubs your fingers between hers, then starts toward the building. You have to hurry to keep beside her.</p>
<<if $flags.normalGameSeen>>
<<actor you>>At the game... where was $exfriendName sitting?<</actor>>
<<actor girlfriend>>Behind us, I think. Why?<</actor>>
<<actor-thought you>>He was beside her. I watched her lean into him when the wind picked up.<</actor-thought>>
<<actor you>>I remembered it differently.<</actor>>
<<actor girlfriend>>You spent half the night looking at me instead of the field. I'm not surprised.<</actor>>
<<elseif $flags.day1ExKissSeen>>
<p>$exfriendName passes through the gate ahead of you. She lifts a hand to him, then goes back to rubbing warmth into your fingers.</p>
<<actor-thought you>>I saw her kiss him by the lockers. I could ask her about it, but what would I say when she asks why?<</actor-thought>>
<<else>>
<<actor-thought you>>She is holding my hand as though she has done it every morning. I don't know how long she thinks we've been together.<</actor-thought>>
<</if>>
<<actor girlfriend>>You look exhausted. Did you sleep at all?<</actor>>
<<actor you>>Not much.<</actor>>
<<actor girlfriend>>Come on. You can sit by me and pretend you're taking notes.<</actor>>
<p>She gives your hand a small tug. You follow her through the gate and keep your mouth shut.</p>
<div class="continue-links">
<<link "Walk to class with her" setup.schoolClassTarget()>><<set $flags.anwoSchoolIntroSeen = true>><<run setup.beginSchoolClass()>><</link>>
</div>
<</nobr>><<nobr>>
<<masteraudio stop>>
<div class="scene-panel">
<p class="scene-lead">At the school entrance, you spot <strong>$girlfriendName</strong> trying to get through the crowd with a folder under her arm. You step aside just as she does. Your shoulder catches hers.</p>
<img @src="setup.ImagePath+'school/bump.png'" class="hero-img delayed" alt="">
<<actor girlfriend>>
Careful. I need these in one piece.
<</actor>>
<<actor you>>
Sorry. Are you all right?
<</actor>>
<<actor girlfriend>>
Yeah, I've got it. Could you get the door?
<</actor>>
<p>You hold it while she straightens the papers against her folder. She gives you a quick smile as she passes.</p>
<<actor girlfriend>>Thanks. See you in class.<</actor>>
<<actor-thought you>>
I could have said good morning before walking into her.
<</actor-thought>>
<div class="continue-links">
<<link "Continue to class" setup.schoolClassTarget()>><<set $flags.normalSchoolIntroSeen = true>><<run setup.beginSchoolClass()>><</link>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel">
<p class="scene-lead"><strong>$girlfriendName</strong> is outside the classroom with $bestfriendName, trying to shut a bag that is too full.</p>
<img @src="setup.ImagePath+'places/school.jpg'" class="hero-img" alt="The school entrance before class">
<<actor girlfriend>>
<<if $flags.normalGameSeen>>Hey. Did your shirt survive?<<else>>Morning. Could you hold the door again?<</if>>
<</actor>>
<<actor you>>
<<if $flags.normalGameSeen>>It's in the wash. I'll let you know.<<else>>Yeah, of course.<</if>>
<</actor>>
<<actor bestfriend>>
<<if $flags.normalGameSeen>>He'll bring you the laundry bill.<<else>>Look, you've got someone to carry that bag now.<</if>>
<</actor>>
<<actor girlfriend>>
You could help me with this zip instead of commenting.
<</actor>>
<p>$bestfriendName takes the bag from her and pulls the trapped sleeve out of the way. You hold the door while they finish.</p>
<div class="continue-links">
<<link "Continue to class" setup.schoolClassTarget()>><<run setup.beginSchoolClass()>><</link>>
</div>
</div>
<</nobr>><<nobr>>
<<actor girlfriend>>Are you serious?<</actor>>
<<actor girlfriend>>$girlfriendMadReason<</actor>>
<<if ($alphaBeta || 0) gte 4>>
<<actor girlfriend>>And after everything you've already given me? Really?<</actor>>
<<elseif $girlfriendTrustLevel lte 5>>
<<actor girlfriend>>I'm already this close to being done with your excuses.<</actor>>
<</if>>
<span id="conv"></span>
<div id="options">
<<you-choice "Sorry. I should have handled it better.">>
<<actor girlfriend>>
That is not much of an explanation.
<</actor>>
<<actor you>>
I know. I screwed up and made it your problem.
<</actor>>
<<if ($alphaBeta || 0) gte 4>>
<<actor girlfriend>>
At least you're honest. Weak, but honest. Don't make me clean up your mess again. [[School|School][$girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)]] /* prose-ok: Jenny's spoken threat, the repetition is her point */
<</actor>>
<<elseif $caged>>
<<actor girlfriend>>
You're locked and you still find ways to be a problem. Unbelievable. Bye. [[School|School][$girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 2)]]
<</actor>>
<<else>>
<<actor girlfriend>>
You are so weak-minded. Bye. [[School|School][$girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 2)]]
<</actor>>
<</if>>
<</you-choice>>
<<you-choice "No, I didn't do that">>
<<actor girlfriend>>
Hmm. Why should I believe you?
<</actor>>
<<actor you>>
Because I'm your boyfriend and I have no reason to lie.
<</actor>>
<<if $girlfriendTrustLevel gt 5>>
<<actor girlfriend>>
Okay. I believe you this time. Next time you will have a problem. [[School|School][$girlfriendTrustLevel = setup.changeFavor(-5)]]
<</actor>>
<<elseif ($alphaBeta || 0) gte 6 && $caged>>
<<actor girlfriend>>
Cute try. You're locked for a reason. Don't insult me with lies on top of it. [[School|School][$girlfriendTrustLevel = 0]]
<</actor>>
<<else>>
<<actor girlfriend>>
I don't trust you anymore. Stop lying! Grow some balls and own your actions. [[School|School][$girlfriendTrustLevel = 0]]
<</actor>>
<</if>>
<</you-choice>>
</div>
<</nobr>><<nobr>>
<span id="conv"></span>
<<set $relationshipState = "reset">>
<<actor girlfriend>>Hey, strokeboy. Hope the hand was worth blowing our anniversary.<</actor>>
<div id='options'>
<<you-choice "I'm sorry. I didn't mean to hurt you.">>
<<actor girlfriend>>
Okay. I accept the apology, once.
Tonight we continue where we should have started. Home. My rules.
<</actor>>
[[School |School][$strokeState = "before-second-time-caught"; $aroused = Math.min(92, Math.max($aroused, 80)); $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)]]
<</you-choice>>
<<you-choice "I don't care. I don't owe you anything.">>
<<actor girlfriend>>Okay. That's it. We're done. /* prose-ok: breakup dialogue */<</actor>>
[[Bye |End lost girlfriend]]
<</you-choice>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/school-week-loop-classroom.jpg'" alt="The teacher waiting while the group checks its project archive">
<<if !setup.projectArchiveReady()>>
<p class="scene-lead"><<if $flags.projectArchiveDone>>The source notes are filed and the upload arrangements are settled.<<else>>There is no project archive meeting waiting for you.<</if>></p>
<div class="continue-links">[[Return Home|Home]]</div>
<<else>>
<h2 class="scene-title">The copy that stays</h2>
<<set _archiveRoles = setup.projectArchiveRoles()>>
<<set _archiveSlide = setup.day40PrivateSlideState()>>
<<if !$flags.projectArchiveRole>>
<p class="scene-lead">The group has one table and the rest of the morning to attach its sources to the final report. $exfriendName opens the folder, then moves the laptop so you can reach it.</p>
<<if _archiveRoles[0] eq "lead">>
<<actor teacher>>You finished first in this project cycle. I would like you to organize the archive review. You can divide the work.<</actor>>
<<actor bully>>All right. Tell me which bit you need. I've got practice after lunch.<</actor>>
<<actor girlfriend>>I can check the report references. Where do you want them?<</actor>>
<<elseif _archiveRoles[0] eq "pair">>
<<actor exfriend>>You take the interview notes. I'll check the totals beside you. That work?<</actor>>
<<elseif _archiveRoles[0] eq "review">>
<<actor teacher>><<if $flags.day31Contribution eq "corrected" && $flags.day39RehearsalResult eq "answered">>Your explanation of the corrected sample was clear.<<else>>Your project result earned you a place in the source review.<</if>> Please check the field section before it is filed.<</actor>>
<<actor exfriend>>I'll hold the upload. Check it against the old tab first.<</actor>>
<<else>>
<<actor teacher>>Bring your original notes to my desk. We can go through one corrected row before you attach the rest.<</actor>>
<<actor exfriend>>I can check them with you. I need the labels right this time.<</actor>>
<</if>>
<<if $flags.ownedPublicRoleAccepted is false>>
<p class="delayed">You leave the ranking sheet folded in your bag. The teacher waits for your answer about the work.</p>
<</if>>
<span id="conv"></span>
<div id="options">
<<if _archiveRoles.includes("lead")>>
<<you-choice "I'll set the archive order. Bring each section to me.">>
<<run setup.chooseProjectArchiveRole("lead")>>
<<actor you>>Sources first, then the totals. $bullyName, match the pitch references. $girlfriendName, check the report. I'll compare the copies.<</actor>>
<p>$bullyName pulls up his section. $girlfriendName brings her chair around to your side of the laptop.</p>
[[Set the upload rule|Project Archive Followup]]
<</you-choice>>
<<you-choice "$exfriendName can assemble it. I'll keep the final review.">>
<<run setup.chooseProjectArchiveRole("delegate")>>
<<actor exfriend>>I'll build the full copy. You get it before I upload anything.<</actor>>
<p>You hand him the folder and keep your source checklist.</p>
[[Set the upload rule|Project Archive Followup]]
<</you-choice>>
<</if>>
<<if _archiveRoles.includes("review")>>
<<you-choice "I'll take the source review and check my section.">>
<<run setup.chooseProjectArchiveRole("review")>>
<p>You catch an old sample label in the report. $exfriendName corrects it while you compare the remaining rows, then asks you to check his export.</p>
[[Set the upload rule|Project Archive Followup]]
<</you-choice>>
<</if>>
<<if _archiveRoles.includes("pair")>>
<<you-choice "I'll check the interviews while $exfriendName checks the totals.">>
<<run setup.chooseProjectArchiveRole("pair")>>
<<actor exfriend>>Start with the twelve park answers. Read me each label. I'll find the row.<</actor>>
<p>You work through the sheet together. When he finds a mismatch, he turns the screen toward you instead of changing your notes.</p>
[[Set the upload rule|Project Archive Followup]]
<</you-choice>>
<</if>>
<<if _archiveRoles.includes("source")>>
<<you-choice "I'll explain one corrected row to the teacher myself.">>
<<run setup.chooseProjectArchiveRole("source")>>
<p>At her desk, you point out where the park answer entered the classroom sample. She asks one follow-up and waits while you find the note.</p>
<<actor teacher>>The correction is clear. Attach this page under your name. It will be retained with the correction in the archive.<</actor>>
[[Set the upload rule|Project Archive Followup]]
<</you-choice>>
<</if>>
</div>
<<else>>
<p class="scene-lead">The sources are checked. $exfriendName has the export ready, but the upload is still waiting.</p>
<<if _archiveSlide eq "removed">>
<<actor girlfriend>>Your warning kept the private edits out of the presentation. I kept the upload locked. Do you want to approve this copy yourself?<</actor>>
<<actor bestfriend>>He's checking the attachments now. You gave him a hobby, $girlfriendName.<</actor>>
<<elseif setup.projectArchiveCanApprove()>>
<<actor teacher>>Your edit history and objection are attached to the approval log. You may require your sign-off before the field section is submitted again.<</actor>>
<p>The key photo was still seen in class. Across the table, $bestfriendName tries to open the upload controls and finds them disabled.</p>
<<elseif _archiveSlide eq "exposed">>
<p>The key photo was seen in class, and the folder still has several editors. $bestfriendName reaches toward the laptop. You put your source pages beside it before she can change the export.</p>
<<actor you>>Wait. I want to settle how my notes get submitted.<</actor>>
<<actor teacher>>Keep your source copy signed. The record must be handed to me directly, not left in the folder.<</actor>>
<<else>>
<<actor teacher>>Decide who verifies the source pages. A signed copy comes straight to me.<</actor>>
<</if>>
<span id="conv"></span>
<div id="options">
<<if setup.projectArchiveCanApprove()>>
<<you-choice "Keep the upload locked until I approve my section.">>
<<run setup.completeProjectArchive("approval")>>
<<actor girlfriend>>I'll send any report changes to you first.<</actor>>
<p>$exfriendName adds your approval to the upload sheet. $bestfriendName closes her laptop; she has no editing slot.</p>
<div class="continue-links">[[Leave school|After school]]</div>
<</you-choice>>
<<else>>
<<you-choice "I'll give the teacher a signed copy directly.">>
<<run setup.completeProjectArchive("teacher-copy")>>
<p>You sign the source pages at the teacher's desk. She files them separately from the group upload, under your name.</p>
<<actor teacher>>Later changes to their copy will not replace this submission.<</actor>>
<div class="continue-links">[[Leave school|After school]]</div>
<</you-choice>>
<</if>>
<<you-choice "$exfriendName and I will co-sign the checked copy.">>
<<run setup.completeProjectArchive("co-sign")>>
<<actor exfriend>>Send every change to both of us. If our copies don't match, the upload stops.<</actor>>
<p>He signs beside your name and gives you a copy. Any later revision will need both signatures.</p>
<div class="continue-links">[[Leave school|After school]]</div>
<</you-choice>>
</div>
<</if>>
<</if>>
</div>
<</nobr>><<nobr>>
<<set $relationshipState = "reset">>
<p class="delayed">
You cut through the hall and spot $girlfriendName with $bullyName by the lockers. They're close, laughing like a private joke.
You hear her before they see you.
</p>
<<actor girlfriend>>...And then he ate it.<</actor>>
<<actor bully>>Wait... you didn't clean up first? And he didn't notice?<</actor>>
<<actor girlfriend>>No.<</actor>>
<span class="delayed">...</span>
<<actor bully>>
OH... hey, $youName! Sorry I wrecked your anniversary yesterday. I didn't mean to.
I gave her something, though. Like an excuse. For you.
<</actor>>
<<if $flags.noticedSmell>>
<<actor-thought you>>
Ate it. Didn't clean up. The taste on your tongue last night suddenly has a shape.
<</actor-thought>>
<<elseif $flags.keptQuietSmell>>
<<actor-thought you>>
You didn't ask last night. Now the hallway is asking for you.
<</actor-thought>>
<<else>>
<<actor-thought you>>
An excuse. Your stomach drops without knowing why yet.
<</actor-thought>>
<</if>>
<div id='options'>
[[An excuse? |Ask about excuse]]
[[Ah, don't worry. You didn't do it on purpose.|School][$girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)]]
<<you-choice "What were you two talking about?">>
<<if $flags.noticedSmell>>
<<actor girlfriend>>Oh... my dog. $bullyName was surprised he didn't notice the new food. Funny how noses work.<</actor>>
<<actor-thought you>>
Dog food. Right. Your jaw hurts from not saying it.
<</actor-thought>>
<<else>>
<<actor girlfriend>>Oh... my dog. $bullyName was surprised he didn't smell the difference in the new food.<</actor>>
<</if>>
[[School |School]]
<</you-choice>>
</div>
<</nobr>><<nobr>>
<<set $flags.day1ExKissSeen = true>>
<div class="scene-panel">
<img class="hero-img" @src="setup.ImagePath+'story/act1/day1-jenny-ex-kiss.jpg'" alt="The couple kissing by the school lockers">
<p class="scene-lead">You catch up with the morning crowd by the lockers.</p>
<p>$girlfriendName is kissing $exfriendName in front of his open locker. He has her folder tucked under his arm. Students squeeze past them on both sides.</p>
<<actor-thought you>>I knew they were together. I could have kept walking.<</actor-thought>>
<<actor bestfriend>>Get a room. Or move, I need my books.<</actor>>
<<actor exfriend>>It's your bag in the way.<</actor>>
<p>$girlfriendName laughs and nudges the bag aside with her foot. $bestfriendName catches you looking as she opens her locker. You turn toward the classroom before she can say anything.</p>
<div class="continue-links">[[Find your seat|School 1 Day - class]]</div>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'school/mc-bored-class.jpg'" alt="Working on a survey in the normal-world classroom">
<p class="scene-lead">On the board, $teacherName has written: <em>Does our town need a later bus?</em></p>
<div id="conv">
<<actor teacher>>Write three questions that would help answer this. Then swap sheets with the person next to you. You have ten minutes.<</actor>>
<p>$girlfriendName writes something, crosses it out, and turns her sheet toward $exfriendName.</p>
<<actor girlfriend>>Would you use a bus instead of walking home in the rain?<</actor>>
<<actor exfriend>>That's two questions. They might like walking when it's dry.<</actor>>
<<actor girlfriend>>You complained the whole way last Friday.<</actor>>
<<actor exfriend>>My shoes were soaked. I like these shoes.<</actor>>
<p>She leans down to look at them. He pulls his feet back under the desk.</p>
<p>Across the aisle, $bullyName slides his phone onto their table. The ticket page for tonight's game is open.</p>
<<actor bully>>Kickoff's at seven. I'm taking the seats by the railing.<</actor>>
<<actor girlfriend>>Leave me one where I can actually see.<</actor>>
<<actor bully>>Get there before me, then.<</actor>>
<<actor girlfriend>>Move your phone. I'm trying to finish this.<</actor>>
<p>He takes it back. You glance at the timetable on your own worksheet.</p>
<<actor-thought you>>Ask when people actually leave town. That would tell you whether the last bus is too early.<</actor-thought>>
</div>
<div id="options">
<<you-action "Suggest a question.">>
<<set $flags.normalSurveyHelped = true>>
<<actor you>>What time do you usually go home? You could ask that first.<</actor>>
<<actor girlfriend>>Oh, that's better. Then we know whether they're missing the last one.<</actor>>
<<actor exfriend>>Put a weekday box next to it. Fridays will be different.<</actor>>
<p>She adds your question. When she hands the sheet over to be marked, she points back at you.</p>
<<actor girlfriend>>He helped with that one.<</actor>>
<p>After class, you find the ticket page on your phone.</p>
<div class="continue-links">[[Go to the game that evening|School 1 Day - game]]</div>
<</you-action>>
<<you-action "Keep working on your own sheet.">>
<<set $flags.normalSurveyHelped = false>>
<p>You write the question on your own sheet. Ahead of you, $girlfriendName and $exfriendName settle on a list of departure times.</p>
<<actor-thought you>>I could still say it. They've moved on now, though.<</actor-thought>>
<p>After class, you find the ticket page on your phone.</p>
<div class="continue-links">[[Go to the game that evening|School 1 Day - game]]</div>
<</you-action>>
</div>
<</nobr>><<nobr>>
<<run setup.advanceGameHourTo(19, 0)>>
<p class="scene-lead">You reach the football ground just before kickoff and find a seat behind $girlfriendName and her friends. She lifts her cup when she notices you.</p>
<<actor girlfriend>>You made it. Can you see from there?<</actor>>
<<actor you>>Yeah, I'm fine here.<</actor>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'lectures/1/touchdown.webp'" alt="A touchdown at the evening game">
<p>The crowd jumps at the first touchdown. $girlfriendName throws both hands up, and the plastic cup in one of them slips free.</p>
<img class="centered delayed" @src="setup.ImagePath+'lectures/1/cup.webp'" alt="The spilled drink at the game">
<<actor you>>Ow. Hey!<</actor>>
<<actor girlfriend>>Oh, shit. Did that get in your eye?<</actor>>
<<actor you>>Mostly the shirt.<</actor>>
<p>She digs a packet of tissues out of her bag and passes it back. You try to blot the wet patch without making it spread.</p>
<<actor girlfriend>>Here, take the rest. I'm really sorry.<</actor>>
<<actor you>>It'll dry. You're missing the game.<</actor>>
<<actor girlfriend>>I can hear the crowd. Have you got enough?<</actor>>
<<actor you>>Yeah. Thanks.<</actor>>
<<actor bestfriend>>You've given him half your bag. He'll expect a lift next.<</actor>>
<<actor girlfriend>>Move your coat. He can sit there instead of on the wet bit.<</actor>>
<p>$bestfriendName pulls the coat into her lap. You move along the row. $girlfriendName waits until you are seated before turning back to the field.</p>
<<actor exfriend>>You missed the replay. He barely got over the line.<</actor>>
<<actor girlfriend>>It still counts. You'd be arguing the other way if they scored it.<</actor>>
<p>Later, the wind picks up. She leans into $exfriendName and pulls his arm around her shoulders while they argue about a substitution.</p>
<p>After the final whistle, she turns back to wish you good night. $exfriendName waits with her bag, and they leave together. You take the other exit with the damp shirt sticking to your chest.</p>
<<actor-thought you>>She asked twice whether I was all right. I keep thinking about that.<</actor-thought>>
<<set $relationshipState = 'known'>>
<div class="continue-links">
<<link "Head home" "Home">><<set $flags.normalGameSeen = true>><<run setup.advanceGameHourTo(22, 0)>><</link>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'school/mc-bored-class.jpg'" alt="MC sitting bored in class">
<p class="scene-lead">$teacherName hands back yesterday's survey sheets. There are circles around half the questions.</p>
<<actor teacher>>
If I've circled a question, it suggests its own answer. Rewrite it so someone can disagree with you.
<</actor>>
<<if $flags.normalSurveyHelped is true>>
<<actor girlfriend>>She liked your bus question. We should've let you do the other two.<</actor>>
<<actor exfriend>>The times were mine.<</actor>>
<<actor girlfriend>>I know. You can put your name next to them.<</actor>>
<p>She turns the marked sheet so you can read the comment. You lean forward over the back of her chair.</p>
<<else>>
<p>$girlfriendName and $exfriendName compare their corrections. You work through the marks on your own sheet.</p>
<</if>>
<p class="delayed">After the bell, $girlfriendName waits near the door while $exfriendName finishes packing. You have enough time to say something before they leave.</p>
<span id="conv"></span>
<div id="options">
<<you-action "Wave at $girlfriendName from a safe distance.">>
<<actor girlfriend>>...Hey.<</actor>>
<<actor bestfriend>>There. He got his wave. Can $girlfriendName hand in the survey now?<</actor>>
<<actor exfriend>>
Coming, babe? We need to hand this in.
<</actor>>
<<actor girlfriend>>
Yeah. See you tomorrow, $youName.
<</actor>>
<<actor-thought you>>
I could ask if she's free after class. He's standing right there, though.
<</actor-thought>>
<<set $aroused = $aroused gte 90 ? $aroused : $aroused + 10>>
<div class="continue-links"><<link "Head home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>></div>
<</you-action>>
<<you-action "I'm going straight home. No self-inflicted damage.">>
<<actor-thought you>>
I have things to do at home. I don't need to wait for them.
<</actor-thought>>
<div class="continue-links"><<link "Head home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>></div>
<</you-action>>
<<you-action "I'll take the long way home and clear my head.">>
<p>You take the path beside the playing fields. By the time you reach the shops, you have stopped looking back toward school.</p>
<div class="continue-links"><<link "Walk home" "Home">><<run setup.advanceGameHourTo(15, 0)>><</link>></div>
<</you-action>>
</div>
<</nobr>><<nobr>>
<<set _quietFrom = $schoolDay>>
<<set _quietTo = setup.nextStorySchoolDay($world, _quietFrom)>>
<<set _quietDays = Math.max(1, _quietTo - _quietFrom)>>
<<set _quietWord = _quietDays eq 2 ? "Two" : (_quietDays eq 3 ? "Three" : (_quietDays eq 4 ? "Four" : (_quietDays eq 5 ? "Five" : String(_quietDays))))>>
<<set _quietBeat = _quietFrom % 3>>
<img class="hero-img centered" @src="setup.ImagePath+'school/mc-bored-class.jpg'" alt="Another ordinary morning in the classroom">
<p class="scene-lead"><<if _quietDays gte 2>><<= _quietWord>> school days run together.<<else>>One school day passes the way the others do.<</if>> Notes, short exercises, and the same walk out of the gate.</p>
<<if _quietBeat eq 0>>
<p>Nothing on the board applies to your row. The list by the door has not moved since the last test, and no one stops to ask you anything.</p>
<<elseif _quietBeat eq 1>>
<<actor exfriend>>You still doing the weekly write-up? Nobody reads those.<</actor>>
<p>You keep the folder in your bag. The teacher asked for it by name on the first morning.</p>
<<else>>
<<actor girlfriend>>Walk me to the corner. Not to the door.<</actor>>
<p>She slows at the last crossing, says see you tomorrow, and goes on ahead of you.</p>
<</if>>
<<if $caged>>
<p>The desk edge presses the cage through every double period, and nobody looks twice at your uniform.</p>
<</if>>
<<run setup.nudgeArousal(random(4, 8))>>
<div class="continue-links">
<<link "Continue the school week" `"School " + setup.nextStorySchoolDay($world, $schoolDay) + " Day " + $world`>><<set _quietTo = setup.nextStorySchoolDay($world, $schoolDay)>><<run setup.advanceGameTime("hours", 6 * (_quietTo - $schoolDay))>><<set $schoolDay = _quietTo + 1>><</link>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day1-anwo-lecture.jpg'" alt="ANWO lecture">
<<actor teacher>>
The district has approved a new social studies unit. It is called ANWO, short for Alpha New World Order.
Its supporters believe status should decide who leads, who receives authority, and how much influence a person has over others.
You are not being asked to support it. Your job is to study what those rules would do to ordinary relationships at school, at work, and at home.
You will work in groups of five. By next month, each group will submit survey data and present its conclusions to the class.
<</actor>>
<p>Around you, people copy the title and turn to look for their usual partners.</p>
<<actor-thought you>>
That's the name from the email. Does anyone else know what it can do?
<</actor-thought>>
<<actor exfriend>>
$girlfriendName, want to use the same group as last term? I can organize the data.
<</actor>>
<<actor girlfriend>>
Yeah, you're good at that. We should get $bullyName for interviews too.
<</actor>>
<<actor exfriend>>
If he actually does the work.
<</actor>>
<<actor bully>>
I heard that. Put my name down.
<</actor>>
<<actor girlfriend>>
Only if you answer the group chat this time.
<</actor>>
<<actor bully>>
No promises, but I'll make people talk.
<</actor>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/act1/day1-group-form.jpg'" alt="project group forming">
<<actor bestfriend>>
I'm joining before this turns into two guys arguing over a spreadsheet.
<</actor>>
<<actor girlfriend>>
Okay, that's four.
<</actor>>
<p>You wait for her to look at you. She checks the room first, then pulls an empty chair up to the table.</p>
<<actor girlfriend>>
$youName, you're with us. You can keep the interview notes and help me present.
<</actor>>
<<actor you>>
Yeah. Of course.
<</actor>>
<<actor bestfriend>>
You could've made him wait a bit longer. He was nearly waving.
<</actor>>
<<actor girlfriend>>
Be nice. He's my boyfriend.
Baby, I'll add you to the group after class.
<</actor>>
<<actor bully>>
Move that chair in, boyfriend. People are trying to get past.
<</actor>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/act1/day1-last-chair.jpg'" alt="The boyfriend walking toward the last open chair as the rest of the project group watches">
<p>You pull the chair closer. $girlfriendName slides her notebook between you and points out the submission date. $exfriendName is already dividing a fresh page into columns.</p>
<<actor-thought you>>She called me her boyfriend in front of him. He didn't even look up.<</actor-thought>>
<<run setup.nudgeArousal(8)>>
<<set $flags.phoneUnlocked = true>>
<<set $flags.anwoGroupFormed = true>>
<<set $storyAct = 1>>
<<set $flags.questHint = "Open Phone and read the project group chat.">>
<div class="delayed">
<<link "Head home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day10-blame-shift.jpg'" alt="The project group meeting with the teacher">
<<if $flags.day10Confessed>>
<p class="scene-lead">The project review is over. Your interview sheets are back in your folder.</p>
<div class="continue-links">[[Home]]</div>
<<else>>
<<if !$flags.resultsLiveSeen>>
<p class="scene-lead">$exfriendName shows you the council's project summary before class. You missed the copy in the group chat.</p>
<<set $flags.resultsLiveSeen = true>>
<<else>>
<p class="scene-lead">The council's summary is open on $teacherName's desk. You recognise the graph from the group chat.</p>
<</if>>
<<actor teacher>>Your group will stay after the bell. The council has asked for a classroom trial based on the submitted projects, and I need to confirm your figures.<</actor>>
<p>When the room empties, $exfriendName takes the chair nearest her laptop. You put your interview sheets on the desk.</p>
<<actor you>>The summary makes it look like we asked a random sample. Most of those responses came from an ANWO forum.<</actor>>
<<if $flags.surveyCaveatSubmitted is true>>
<<actor exfriend>>Your note is in the submitted file. Last page. Let me open the original.<</actor>>
<p>He scrolls to your name. The paragraph about the sample is there; it is absent from the council's summary.</p>
<<actor you>>That's the part I asked them to read with the numbers.<</actor>>
<<elseif $flags.surveyCaveatSubmitted is false>>
<<actor exfriend>>We left the comment out of the cover note. You agreed to send that version.<</actor>>
<<actor you>>I know. That doesn't make the sample representative.<</actor>>
<<else>>
<<actor you>><<if $flags.day8SpokeUp>>I raised this before we submitted. I can't tell from this copy whether the objection reached them.<<else>>We discussed the scoring when we tested the draft. The summary doesn't explain the problem.<</if>><</actor>>
<<actor exfriend>>I can confirm where the responses came from. I don't have the attachment list on this screen.<</actor>>
<</if>>
<<actor teacher>>Were any of the responses fabricated?<</actor>>
<<actor exfriend>>No. I exported the totals. He collected the park interviews and the household interview.<</actor>>
<<actor you>>I'm not saying he made them up. The people who chose to answer aren't the same as the people this rule would apply to.<</actor>>
<<actor bestfriend>>You're very calm about risking $girlfriendName's grade.<</actor>>
<p>$girlfriendName looks down at the cover sheet, then slides it beside the original forms.</p>
<<actor girlfriend>>He's asking you to include the qualification. We can give you the source pages. We don't need to accuse each other of cheating.<</actor>>
<<actor bully>>Do we have to redo the interviews?<</actor>>
<<actor teacher>>No. I will record the objection and forward the qualification with the review. The council has already approved a limited class trial. This submission is part of its supporting material, not a vote on whether the trial goes ahead.<</actor>>
<<actor you>>So the objection gets forwarded, but the trial starts anyway?<</actor>>
<<actor teacher>>Yes. Keep the distinction in your presentation. For the trial itself, you will follow the same assessment rules as the rest of the class.<</actor>>
<p>She adds your concern to the meeting record and turns the screen so you can check the wording. $exfriendName checks that the online and interview samples are named separately.</p>
<<actor girlfriend>>Read it before we go. I don't want another meeting because you nodded at something you hadn't read.<</actor>>
<<actor-thought you>>You read the wording once more and sign. Her arms stay folded until the screen turns back.<</actor-thought>>
<div class="continue-links"><<link "Finish the review and head home" setup.schoolExitTarget()>><<run setup.completeDay10Review()>><</link>></div>
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day12-alpha-list.jpg'" alt="Adult classmates looking at an unofficial ranking on a phone">
<p class="scene-lead">Someone has made a mock ranking and set it as their phone wallpaper. By the time you reach your locker, it has been forwarded to half the class.</p>
<p>Two students look from the screen to you. One says "bottom five" before the other puts the phone away.</p>
<<actor bully>>Send me that. I want to see where they put me.<</actor>>
<<actor exfriend>>It isn't the actual list. There haven't been any tests yet.<</actor>>
<<actor bully>>I know. Send it anyway.<</actor>>
<p>$teacherName calls everyone inside and lays a printed assessment sheet on each desk.</p>
<<actor teacher>>The council has approved the ANWO classroom trial. We will maintain provisional alpha and beta rankings and update them after the assessments.
Higher-ranked students receive first choice of partners for drills. Lower-ranked students answer first when called on. Academic performance, presentation, and conduct will all be recorded.<</actor>>
<<if $flags.day10ConcernRecorded>>
<<actor teacher>>The review includes a written objection to the survey's sampling and categories. It remains attached to the project. The trial will proceed under the council's decision.<</actor>>
<<elseif $flags.day8SpokeUp>>
<<actor teacher>>Questions about the survey can be included in the final presentation. Today's assessment instructions apply to everyone.<</actor>>
<</if>>
<<actor exfriend>>How much does the academic part count?<</actor>>
<<actor teacher>>It is one part of the assessment. A correct answer does not exempt anyone from the conduct requirements.<</actor>>
<p>He writes that down, pressing hard enough to leave a mark on the sheet beneath it. $bestfriendName leans over to read your copy.</p>
<<actor bestfriend>>Answering first. You'd better stop waiting for $girlfriendName to nod at you.<</actor>>
<p>After the bell, $girlfriendName catches your sleeve near the stairs. She waits for the group behind you to pass before speaking.</p>
<<actor girlfriend>>Which part are you worrying about?<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "This is because of our survey. Because of me.">>
<<set $flags.day12BlameSelf = true, $flags.day12FearBeta = false, $flags.day12ReachedHand = false>>
<<actor girlfriend>>We all worked on it. You collected two interviews. You didn't approve a class trial.<</actor>>
<div class="continue-links">[[Talk by the stairs|School 12 Day anwo private]]</div>
<</you-choice>>
<<you-choice "What if they put me in beta?">>
<<set $flags.day12BlameSelf = false, $flags.day12FearBeta = true, $flags.day12ReachedHand = false>>
<<actor girlfriend>>Then we find out what they actually recorded. That picture on someone's phone isn't your result.<</actor>>
<div class="continue-links">[[Talk by the stairs|School 12 Day anwo private]]</div>
<</you-choice>>
<<you-action "Reach for her hand.">>
<<set $flags.day12BlameSelf = false, $flags.day12FearBeta = false, $flags.day12ReachedHand = true>>
<p>She glances at the students coming down the stairs and moves closer to the rail.</p>
<<actor girlfriend>>Come over here. We're blocking the way.<</actor>>
<div class="continue-links">[[Step beside her|School 12 Day anwo private]]</div>
<</you-action>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/class-rank-board.jpg'" alt="The provisional class board near the stairs">
<<if !$flags.classListLive>><<set $flags.publicRankUnread = true>><</if>>
<<set $flags.classListLive = true>>
<<if $flags.day12PrivateDone>>
<p class="scene-lead">The conversation by the stairs is over. The provisional list is available on the board and your phone.</p>
<div class="continue-links">[[Leave school|After school]]</div>
<<else>>
<<if $flags.day12ReachedHand>>
<p>Away from the moving crowd, she takes your hand. Her thumb brushes the edge of the assessment sheet you are still holding.</p>
<<actor girlfriend>>You've nearly folded it in half. Let me put it in your folder.<</actor>>
<<elseif $flags.day12FearBeta>>
<<actor girlfriend>>I can't promise where you'll end up. I can sit with you and go through the instructions before class.<</actor>>
<<else>>
<<actor girlfriend>>I wanted the grade too. If you keep saying this is all your fault, people are going to let you take it.<</actor>>
<</if>>
<<actor you>>You sounded angry after the meeting.<</actor>>
<<actor girlfriend>>I was. I didn't know whether she was about to throw out the whole project. Then everyone started talking over you and I couldn't hear what you were asking.<</actor>>
<p>She straightens the papers against her folder.</p>
<<actor girlfriend>>Tell me when you're worried. I might disagree with you, but I'd rather hear it from you than from $bestfriendName's version in the chat.<</actor>>
<<actor you>>Can we get something to eat?<</actor>>
<<actor girlfriend>>Yeah. I've been hungry since the second page of that briefing.<</actor>>
<p>She waits while you put the folder away, then walks with you toward the doors.</p>
<<set $flags.questHint = "Phone: the provisional Alpha/Beta list is available in Ranks.">>
<div class="continue-links"><<link "Leave school together" "After school">><<run setup.completeDay12Talk()>><</link>></div>
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day13-math-target.jpg'" alt="The teacher calling on the player during the assessment">
<<actor teacher>>We will begin with oral mathematics. I will record whether each answer is complete. The result counts toward the provisional ranking.<</actor>>
<<actor teacher>>$bullyName, what is five times eight?<</actor>>
<<actor bully>>Forty.<</actor>>
<<actor teacher>>Correct. $exfriendName, fifteen times fifteen?<</actor>>
<<actor exfriend>>Two hundred and twenty-five.<</actor>>
<p>She marks his sheet and moves down the column to your name.</p>
<<actor teacher>>Now, $youName, give me every solution to the equation x squared equals 144.<</actor>>
<<actor-thought you>>Twelve. Negative twelve works too. I need to say both before I start checking myself again.<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "12 and -12.">>
<<set $flags.day13CompleteAnswer = true>>
<<run setup.applyRecognition("act1-day13-complete")>>
<<actor teacher>>Correct. Both values produce 144 when squared. The full answer has been recorded.<</actor>>
<p>$girlfriendName adds the minus sign to her own notes and glances back at you.</p>
<<actor girlfriend>>I forgot that one. Thanks.<</actor>>
<<include "School 13 Day anwo after answer">>
<</you-choice>>
<<you-choice "12... and negative...">>
<<set $flags.day13CompleteAnswer = false>>
<<run setup.applyRecognition("act1-day13-incomplete")>>
<img class="centered delayed" @src="setup.ImagePath+'lectures/13/laugh.jpeg'" alt="Classmates reacting while the answer is left unfinished">
<<actor teacher>>You trailed off before the second value. The solutions are 12 and -12. I am recording an incomplete answer.<</actor>>
/* The assessment records public performance, never private identity. */
<<actor-thought you>>I had both numbers. I stopped because I was watching her face instead of finishing.<</actor-thought>>
<<include "School 13 Day anwo after answer">>
<</you-choice>>
</div>
<</nobr>><<nobr>>
<<actor teacher>>The next assessment concerns personal preferences and the council's model of masculine confidence. You will write a short essay. Read the criteria before the next class.
$youName, stay for a moment when we finish.<</actor>>
<p>After the bell, you wait beside her desk while the others leave.</p>
<img class="hero-img centered" @src="setup.ImagePath+'teacher/sitting-mean.jpeg'" alt="The teacher explaining the next assessment after class">
<<actor teacher>><<if $flags.day13CompleteAnswer is true>>Your mathematics answer was correct. That mark remains on the sheet.<<elseif $flags.day13CompleteAnswer is false>>You knew more than you finished saying. The next assessment will give you time to write.<<else>>Check your mathematics mark on the sheet before you leave.<</if>><</actor>>
<<actor you>>What are we supposed to prepare for an essay about ourselves?<</actor>>
<<actor teacher>>The council distinguishes approved masculine confidence from what its material calls "sissy" behavior. Be familiar with that distinction. It will be used in the assessment.<</actor>>
<p>She taps the word on the criteria sheet. There is no definition beside it.</p>
<<actor you>>What does it mean here?<</actor>>
<<actor teacher>>Read the criteria first. You can bring a specific question to the next class.<</actor>>
<<actor-thought you>>It isn't defined on the sheet. I'll look up the word before I ask the group about it.<</actor-thought>>
<<set $flags.sissyHintGiven = true>>
<<set $flags.questHint = "Phone: look up the term, then decide what to do with the group's quiz link.">>
<div class="continue-links"><<link "Take the sheet home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>></div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'lectures/15/smartphone-basket.jpg'" alt="Phones collected at the front of the classroom">
<<if !$flags.sissyTestDone && !$flags.sissyTestDeclined>>
<<set $flags.questHint = "Phone: read the group's message and choose whether to open the quiz.">>
<<actor-thought you>>I still haven't answered the quiz message. I should decide before the assessment.<</actor-thought>>
<div class="continue-links">[[Check the message at home|Home][$schoolDay = 15; $gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<<elseif $flags.day15Passed>>
<p class="scene-lead">The assessment is finished and your phone has been returned.</p>
<div class="continue-links">[[Leave school|After school]]</div>
<<else>>
<<set $flags.questHint = "">>
<<actor teacher>>Put your phones in the numbered basket slots and leave them unlocked. Your essay will be handwritten. You have two hours to describe an ideal experience with a partner and explain your choices.<</actor>>
<<actor you>>Why do they need to be unlocked?<</actor>>
<<actor teacher>>The classroom device review is part of today's assessment. The council's trial sheet permits it. Put yours beside your candidate number.<</actor>>
<p>You look back at the sheet. The device-review line is at the bottom, below the essay criteria. Ahead of you, $exfriendName hesitates with his thumb over the screen before putting his phone down.</p>
<<actor-thought you>><<if setup.schoolQuizOutcome() eq "quiz">>The quiz is still in my browser. I could ask what she's reviewing, but she's waiting for the phone.<<elseif setup.schoolQuizOutcome() eq "declined">>I closed the quiz link. The definition is the only search I made.<<else>>I don't know which activity record she'll be looking at.<</if>><</actor-thought>>
<p>The class begins writing. You describe an evening with $girlfriendName, then reread every sentence against the criteria. Twice, you cross out a hesitation and make the sentence sound more certain.</p>
<p>While everyone is working, $teacherName carries the basket into the adjoining office. When she returns, she has a separate sheet of notes.</p>
<div class="continue-links"><<link "Hand in the essay" "School 15 Day anwo teacher comes back">><<run setup.completeSchoolEssay()>><</link>></div>
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'school/mc-bored-class.jpg'" alt="Finishing the handwritten assessment">
<p class="scene-lead">Your essay is finished. You have described an evening with $girlfriendName and checked the wording against the assessment criteria.</p>
<<actor-thought you>>I keep wondering which sentence she'll read back to the class. I should hand it in before I start crossing things out again.<</actor-thought>>
<div class="continue-links"><<link "Hand in the essay" "School 15 Day anwo teacher comes back">><<run setup.completeSchoolEssay()>><</link>></div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day15-sissy-trap.jpg'" alt="The teacher reviewing phone activity while the class listens">
<<set _quizRoute = setup.schoolQuizOutcome()>>
<<actor teacher>>I will mark the essays before the next ranking update. I have also reviewed the recent activity on your phones. Those records are assessed separately.<</actor>>
<p>$exfriendName looks toward the basket. $girlfriendName follows his glance.</p>
<<actor teacher>>$exfriendName, your activity includes a search for a deepfake of $girlfriendName. The record falls within the rubric's approved interest category.<</actor>>
<<actor girlfriend>>A deepfake of me?<</actor>>
<<actor exfriend>>I didn't make anything. It was a search.<</actor>>
<<actor girlfriend>>We'll talk about that after class.<</actor>>
<<actor teacher>>This mark concerns the category of interest. It is not a judgment about the people named in the search.<</actor>>
<p>$girlfriendName puts her pen down. $exfriendName keeps looking at his desk.</p>
<<actor teacher>>$bullyName, your activity also falls within the approved category. You pass this part of the assessment.<</actor>>
<<actor bully>>Can we get the phones back now?<</actor>>
<<actor teacher>>When I have finished.<</actor>>
<<if _quizRoute eq "quiz">>
<<actor teacher>>$youName, the record contains a definition search and the Twelve Types quiz pages. The rubric treats continued browsing as sustained interest. You did not pass this assessment.<</actor>>
<p>Someone behind you repeats "twelve." $bestfriendName turns in her chair to see your reaction.</p>
<<actor you>>You told me to read the criteria. There wasn't a definition on the sheet.<</actor>>
<<actor teacher>>The definition is consistent with preparation. The additional quiz is the reason for this result. If you dispute the record, write the distinction on your assessment sheet.<</actor>>
<<actor-thought you>>She gave me the word. $bestfriendName supplied the link. I thought looking at the questions would help me work out what they meant.<</actor-thought>>
<<elseif _quizRoute eq "declined">>
<<actor teacher>>$youName, the record contains one definition search. That is consistent with preparation. You pass this assessment.<</actor>>
<<actor-thought you>>I nearly opened the other link. I'm glad I left it alone.<</actor-thought>>
<<else>>
<<actor teacher>>$youName, the activity record is incomplete. This part stays ungraded until it can be checked. Your essay will still be marked.<</actor>>
<<actor-thought you>>At least an incomplete record isn't being treated as proof.<</actor-thought>>
<</if>>
<p>When the phones are returned, $girlfriendName comes to the side of your desk. She is still holding the blank corner of the sheet where she stopped taking notes.</p>
<<actor girlfriend>><<if _quizRoute eq "quiz">>Did she read out the same quiz $bestfriendName sent?<<elseif _quizRoute eq "declined">>You passed. Keep the marked sheet before someone starts retelling it.<<else>>Keep that copy. It says ungraded, whatever people decide to say outside.<</if>><</actor>>
<<if _quizRoute eq "quiz">><<actor you>>Yeah. That one.<</actor>><<actor girlfriend>>Come and find me after the next class. I want to hear it from you.<</actor>><</if>>
<<if !$flags.day15Passed>>
<<run setup.nudgeArousal(8)>>
<<if _quizRoute eq "quiz">><<run setup.applyRecognition("act1-day15-trap")>><<elseif _quizRoute eq "declined">><<run setup.applyRecognition("act1-day15-decline")>><</if>>
<</if>>
<<set $flags.day15Passed = true>>
<<set $flags.questHint = "">>
<div class="continue-links">[[Leave school|After school]]</div>
<</nobr>><<nobr>>
<<set _quizRoute = setup.schoolQuizOutcome()>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day16-teacher-debrief.jpg'" alt="The teacher returning the marked assessment sheets">
<p>Inside, $teacherName hands back the essays with the activity marks clipped behind them.</p>
<<actor teacher>>Your written work and the activity review are separate entries. Read both before checking the updated list. An appeal must identify the entry you dispute.<</actor>>
<<if $flags.day13CompleteAnswer is true>>
<<actor teacher>>$youName, your complete mathematics answer remains credited. A later assessment does not erase it.<</actor>>
<<elseif $flags.day13CompleteAnswer is false>>
<<actor teacher>>$youName, the unfinished mathematics answer is still marked incomplete. Bring that sheet if you want to discuss it.<</actor>>
<</if>>
<p>You find your own handwriting under the marks. A sentence you nearly crossed out has a small tick beside it.</p>
<p>After class, $girlfriendName waits by the corridor water fountain. She moves her bag off the ledge so you can put your folder down.</p>
<<actor girlfriend>><<if _quizRoute eq "quiz">>I saw $bestfriendName send that quiz. I didn't know the teacher was going to read out our searches.<<elseif _quizRoute eq "declined">>You made the right call closing that link. Don't let her turn a pass into something else.<<else>>Have they told you when they'll check the missing record?<</if>><</actor>>
<<actor you>><<if _quizRoute eq "unknown">>No. Just that it stays ungraded for now.<<else>>Did you talk to $exfriendName about his search?<</if>><</actor>>
<<actor girlfriend>><<if _quizRoute eq "unknown">>Then keep this copy. Ask for the answer in writing.<<else>>Yes. He knows I'm angry. I'm dealing with that, and I still wanted to see how you were doing.<</if>><</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice resistance "They don't get to rewrite what happened.">>
<<set $flags.day16TalkStance = "defended">>
<<actor girlfriend>><<if _quizRoute eq "quiz">>Then use the marked sheet. The definition and the quiz are two different entries. Ask her to explain the rule.<<elseif _quizRoute eq "declined">>You stopped and you passed. Keep the sheet when someone claims otherwise.<<else>>Find out what's missing first. You need the actual record to challenge it.<</if>><</actor>>
<div class="continue-links">[[Collect your things|School 16 Day anwo end][_ab = setup.applyIdentity("act1-day16-defend"); _public = setup.applyRecognition("act1-day16-defend")]]</div>
<</identity-choice>>
<<you-choice "What did you think of my result?">>
<<set $flags.day16TalkStance = "asked">>
<<if $girlfriendTrustLevel gt 5>>
<<actor girlfriend>><<if _quizRoute eq "quiz">>I wish you'd closed the link. I also wish she hadn't read it out loud.<<elseif _quizRoute eq "declined">>You decided where to stop without waiting for the rest of us. I'm glad you did.<<else>>I haven't got a result to judge. I can wait while you ask about it.<</if>><</actor>>
<p>She stays beside the fountain while you put the assessment back in your folder.</p>
<div class="continue-links"><<link "Walk out with her" "School 16 Day anwo end">><<if !$flags.day16FavorGiven>><<run setup.changeFavor(1)>><<set $flags.day16FavorGiven = true>><</if>><</link>></div>
<<else>>
<<actor girlfriend>>I haven't even finished reading my own sheet. Give me a minute before you ask me to explain yours.<</actor>>
<div class="continue-links">[[Give her a moment|School 16 Day anwo end]]</div>
<</if>>
<</you-choice>>
<<you-action "Laugh it off before they can.">>
<<set $flags.day16TalkStance = "joked">>
<<actor you>><<if _quizRoute eq "quiz">>At least I'm thorough.<<elseif _quizRoute eq "declined">>One search. Apparently that's my limit.<<else>>Maybe they lost the marks with the phone log.<</if>><</actor>>
<p>You say it loudly enough for the students by the door to hear. One of them laughs.</p>
<<actor girlfriend>>They laughed. I didn't.<</actor>>
<div class="continue-links">[[Pick up your folder|School 16 Day anwo end][_public = setup.applyRecognition("act1-day16-embrace-joke")]]</div>
<</you-action>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/class-rank-board.jpg'" alt="The updated class ranking outside the classroom">
<<if $flags.day16TalkStance eq "defended">>
<<actor girlfriend>>Keep the original sheet. Use a copy if you write on it for the review.<</actor>>
<<elseif $flags.day16TalkStance eq "asked">>
<<actor girlfriend>>Text me when you get home. We can talk after I've had something to eat.<</actor>>
<<elseif $flags.day16TalkStance eq "joked">>
<p>She waits for the students by the door to leave before walking beside you.</p>
<<else>>
<p>$girlfriendName waits while you put the assessment sheets in your folder.</p>
<</if>>
<<set _youRank = setup.getPlayerClassRank()>>
<p class="scene-lead">The updated list is pinned beside the classroom door. <<if _youRank>>Your name is #<<= _youRank.rank>>, marked <<= _youRank.band>>.<<else>>Your row has not loaded yet.<</if>></p>
<<actor girlfriend>>Are you checking the list, or coming with me?<</actor>>
<p>She shifts her bag onto the other shoulder and leaves you room to choose.</p>
<<run setup.nudgeArousal(8)>>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>[[Look at the ranking board|Class board]]<</if>>
[[Leave school|After school]]
</div>
<</nobr>><<nobr>>
<div id="conv">
<<actor teacher>>
Good morning. Before we begin, I need to explain a change to these classes.
<</actor>>
<<actor teacher>>
The council has approved "physical confidence" as a ranking factor. Your standing will now reflect presence and size as well as academic performance.
The council also believes that lower-ranked students are not showing enough respect to those above them.
<</actor>>
<<actor teacher>>
Today I will demonstrate why size influences that part of the ranking. Please pay attention to the comparison.
<</actor>>
<img class="centered delayed" @src="setup.ImagePath+'lectures/1/white-black-cock.jpeg'">
<img class="centered delayed" @src="setup.ImagePath+'lectures/1/alpha-beta-cock.jpeg'">
<img class="centered delayed" @src="setup.ImagePath+'lectures/1/white-black-cock2.jpeg'">
<<actor teacher>>
These images illustrate the physical differences included in the council's scoring criteria. Smaller students receive fewer points in this category.
<</actor>>
<<actor teacher>>
Many women are taught to say that size does not matter, but their reactions often suggest otherwise.
<</actor>>
<<actor girlfriend>>
Stop that. I don't believe your nonsense.
<</actor>>
<<actor teacher>>
Because you do not accept the material, the claim will be tested. $youName and $bullyName, please come to the front of the room.
Willing participation is preferred. A refusal will be recorded as beta hesitation.
<</actor>>
</div>
<div id="options">
<<you-choice "I will prove you wrong!">>
<<set $flags.day20Exposed = true>>
<<run setup.applyRecognition("act1-day20-expose")>>
<<actor bully>>
Sure, I'm in.
<</actor>>
<p class="delayed">You step beside $bullyName and unzip before you can lose your nerve. He strips too. With both of you exposed, the difference is obvious, and the room notices before $teacherName says a word.</p>
<img class="centered delayed" @src="setup.ImagePath+'lectures/1/show-off.webp'">
<<include "First time alpha cock see">>
<</you-choice>>
<<you-choice "This is insane. I'm not doing that.">>
<<set $flags.day20Exposed = false>>
<<run setup.applyRecognition("act1-day20-refuse")>>
<<actor teacher>>
Your refusal has been recorded. You are still required to stand at the front. You may remain dressed while $bullyName demonstrates physical confidence.
<</actor>>
<<actor bully>>
Relax. I'll do the heavy lifting. Literally.
<</actor>>
<<actor bestfriend>>
He said no, then walked up anyway. Don't look at $girlfriendName like she sent you.
<</actor>>
<p class="delayed">You keep your jeans closed. $bullyName does not. $teacherName positions you beside him and lets your refusal become the comparison instead.</p>
<img class="centered delayed" @src="setup.ImagePath+'lectures/1/show-off.webp'">
<<include "First time alpha cock see">>
<</you-choice>>
</div>
<</nobr>><<nobr>>
<<actor girlfriend>>
...
<</actor>>
<p class="delayed">$girlfriendName's eyes drop to $bullyName despite herself, then snap back to his face. Her expression changes before she can hide it.</p>
<<actor girlfriend>>
Okay, he is... I mean, it is objectively impressive. I'm not going to pretend I didn't see it.
<</actor>>
<<actor bestfriend>>
$girlfriendName looked away, then checked a second time. Don't ask her to lie about it for you.
<</actor>>
<<actor girlfriend>>
Shut up, $bestfriendName.
<</actor>>
<<actor-thought you>>
Your mind stalls when you see her expression. For half a second, she forgets that you are in the room.
You recognize that look from bed, but you have never been the one to draw it out of her.
<</actor-thought>>
<<actor you>>
Okay... can I sit down now?
<</actor>>
<<actor bully>>
Relax, man. It's just genetics. Don't make it weird.
<</actor>>
<<actor bestfriend>>
He said "just genetics," and you still asked to sit down. $girlfriendName heard both.
<</actor>>
<<actor teacher>>
<<if $flags.day20Exposed is false>>You have seen physical confidence and hesitation side by side. The council considers that reaction measurable evidence.<<else>>You have all seen the size comparison. The council considers it measurable evidence, regardless of your personal reaction.<</if>>
For homework, study the physical distinctions between alpha and beta classifications. The board will be updated to reflect today's demonstration.
<</actor>>
<<run setup.nudgeArousal(12)>>
<<set $flags.anniversaryTonight = true>>
<<set $relationshipState = "reset">>
<p class="delayed">After class, $girlfriendName catches your sleeve in the hallway, away from $bullyName.</p>
<<actor girlfriend>>
Hey. Look at me. Not at the floor.
Tonight is ours. Anniversary. I can't meet after school, $sisterName needs me for something first.
Go home and wait for me. Don't spiral all night before I get there.
<</actor>>
<<actor-thought you>>
Her perfume and the pressure of her hand should calm you, but your head is still full of $bullyName and the laughter from class.
You can hear her trying to sound normal. It makes the humiliation worse.
<</actor-thought>>
<<actor you>>
I'll be there. I swear.
<</actor>>
<<actor girlfriend>>
Then be there. Not on the phone, not in a hallway. Home.
<</actor>>
<<set $flags.questHint = "Anniversary night. You are too wound up, Home → Lose control.">>
<<run setup.peakArousal()>>
<div class="continue-links">
[[Go home aching|Home][$gameDate = setup.changeDate($gameDate, 'hours', 4)]]
</div>
<</nobr>><<nobr>>
<div id="conv">
<<actor teacher>>
We have spent several sessions comparing alpha and beta classifications.
<</actor>>
<<actor teacher>>
Today we will discuss chastity as a method of behavior control.
<</actor>>
<img class="centered delayed" @src="setup.ImagePath+'lectures/2/locked-cock.jpg'">
<<actor teacher>>
A chastity device prevents unsupervised stimulation. The council recommends it when a student repeatedly ignores agreed limits.
<</actor>>
<<actor teacher>>
For homework, students who know a smaller student who repeatedly ignores rules should fit him with a chastity device. The device should remain in place until our next session. Keyholders should record the fit, behavior changes, and requests for release.
<</actor>>
<<actor you>>
You won't lock me up, right, $girlfriendName?
<</actor>>
<<actor girlfriend>>
No. I think it's a little radical.
I mean... as long as you play by the rules, why cage it?
<</actor>>
<<actor bully>>
After the size demo? Radical is just efficient.
<</actor>>
<<actor bestfriend>>
$girlfriendName said "as long as." Circle that part on your homework.
<</actor>>
<<actor-thought you>>
Her smile is soft, but she holds your gaze when she says "rules." You remember the Day 20 board and look away first.
<</actor-thought>>
</div>
<p class="delayed">After the bell, she walks with you as far as the stairs, close enough that $bullyName can see, quiet enough that he cannot hear.</p>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/act2/day25-rules-stairs.jpg'" alt="rules warning after class">
<<actor girlfriend>>
That lecture was intense. But she isn't totally wrong about... control.
<</actor>>
<<actor girlfriend>>
I meant what I said. Play by the rules and I don't need a lock.
Hands off yourself. Show up when you say you will. Make me feel chosen, not like a pause between strokes.
<</actor>>
<<actor girlfriend>>
<<if $flags.caughtStroking1>>If you do it again, I'm done having the same argument.<<else>>If you break that rule, I'm not going to argue about it afterward.<</if>> $sisterName already offered me a solution.
<</actor>>
<<if $flags.caughtStroking1>>
<<actor-thought you>>
Anniversary. Her on your bed. Your hand later that same night. She remembers.
<</actor-thought>>
<<else>>
<<actor-thought you>>
She says it like a joke. Your cock still hears a threat.
<</actor-thought>>
<</if>>
<<actor you>>
I can follow rules.
<</actor>>
<<actor girlfriend>>
Good, prove it. Come home later, and don't sneak off because you "need a minute."
<</actor>>
<<run setup.peakArousal()>>
<<set $flags.day25RulesWarning = true>>
<<set $flags.mustResolveCage = true>>
<<set $flags.questHint = "You promised to follow the rule. Home: try to get through the evening.">>
<div class="continue-links">
[[Go home (you are buzzing)|Home][$gameDate = setup.changeDate($gameDate, 'hours', 4)]]
</div>
<</nobr>><<nobr>>
<<if $caged>><<run setup.applyRecognition("owned-day26-locked")>><</if>>
<<if $flags.ultimateHumiliationDone>>
<<actor-thought you>>
Last time you stood in this hallway, $bullyName was in your living room and $girlfriendName was wearing his cologne on her neck.
Today is just Monday. The lock doesn't know what day it is. You do.
<</actor-thought>>
<<elseif $caged>>
<<actor-thought you>>
The lock shifts under your jeans as you cross the same hallway.
You still hear that morning's rules: you clean when she says, begging makes her wait longer, and Fridays belong to whoever she invites.
<</actor-thought>>
<<else>>
<<actor-thought you>>
Something changed. You can feel it in the way $girlfriendName looks at you when she thinks you're not watching.
<</actor-thought>>
<</if>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'places/school.jpg'" alt="school entrance">
<<actor girlfriend>>
Morning. Try not to make that careful walk so obvious.
<</actor>>
<<if $caged>>
<<actor-thought you>>
She tells you to walk normal. The cage shifts with every other step, and you cannot do anything about it. You nod, and she turns toward class without waiting for an answer.
<</actor-thought>>
<</if>>
<</nobr>>
<div id="conv"></div>
<<if $caged>>
<div id="options">
<<you-choice "Walk beside her like nothing changed.">>
<<actor girlfriend>>
See? You remember how to act normal.
I have the key, but class is still class, so don't make it weird.
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(6)>>
<<include "School 26 Day anwo class">>
<</you-choice>>
<<you-choice "Mumble: do the others know?">>
<<actor girlfriend>>
The others? $bestfriendName knew before you did, and $bullyName guessed when you started walking like that.
The office added a supervision note this morning. Nobody's going to ask you out loud, but it isn't a secret anymore.
Except me. I care about the key.
<</actor>>
<<run setup.nudgeArousal(8)>>
<<include "School 26 Day anwo class">>
<</you-choice>>
<<you-choice "Can we talk about last night?">>
<<actor girlfriend>>
We're not discussing last night in the hallway. We have rules now, and you know what they are.
We can talk at home, so get to class.
<</actor>>
<<run setup.nudgeArousal(10)>>
<<include "School 26 Day anwo class">>
<</you-choice>>
</div>
<<else>>
<div id="options">
<<you-choice "Head to class together.">>
<<actor girlfriend>>
See you after class, and behave until then.
<</actor>>
<<run setup.nudgeArousal(4)>>
<<include "School 26 Day anwo class">>
<</you-choice>>
</div>
<</if>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day26-hierarchy-lecture.jpg'" alt="The teacher presenting the hierarchy lecture">
<<actor teacher>>
Attendance is complete. Today we will continue examining how rank affects group behavior.
<</actor>>
<<if $caged>>
<<actor teacher>>
The council has also added your current supervision status to the public recognition record, $youName. Check the board after class.
<</actor>>
<</if>>
<<if $caged>>
<<actor-thought you>>
You sit locked while she lectures about rank and group behavior. Someone behind you coughs.
It is $bullyName. He keeps his eyes forward. You cannot tell whether the cough was meant for you.
<</actor-thought>>
<</if>>
<<actor bully>>
Council updated the rankings over the weekend. Some people climbed. You should probably check where you ended up.
<</actor>>
<<if setup.classRankingHasUpdate()>>
<<actor bestfriend>>
The board changed. $youName, go look. Or don't. How much honesty do you want today? /* prose-ok: Alessia's clipped dig */
<</actor>>
<<else>>
<<actor bestfriend>>
Nothing changed. You're exactly where you were.
<</actor>>
<</if>>
<<actor teacher>>
$girlfriendName, $exfriendName, $bullyName. Your project is due next week. Make sure all five members contribute equally.
<</actor>>
<<actor exfriend>>
Equally. Sure.
<</actor>>
<<actor bestfriend>>
He said "equally" like he's never seen a group project before. Classic.
<</actor>>
<<if $flags.ultimateHumiliationDone>>
<<actor-thought you>>
$bullyName was in your living room. He was in your bed. Now he is two seats away, listening to the project deadline like that night required no more effort than homework.
Only you and $girlfriendName know what happened there, yet sitting near him is enough to make your cock press harder against the cage.
<</actor-thought>>
<<elseif $caged>>
<<actor-thought you>>
You look at $exfriendName and wonder what he sees when he looks at you now.
Probably the same thing he always saw. A plus-one. A wallet. A boyfriend with a deadline.
<</actor-thought>>
<</if>>
<<run setup.peakArousal()>>
<<set $flags.day26Done = true>>
<<set $flags.questHint = "Check the ranking board. After school.">>
<p class="delayed">After class, $girlfriendName catches your arm at the door. Quick. Before anyone notices.</p>
<<actor girlfriend>>
You did fine, so relax on the way out.
And... don't forget that Friday's coming.
<</actor>>
<<if ($flags.fridayDateStage || 0) gte 4>>
<<actor-thought you>>
Friday could belong to $bullyName, the ex, or both of them. You stopped counting whose turn it is.
She still counts.
<</actor-thought>>
<<else>>
<<actor-thought you>>
She says Friday like it is a date. You know it is a slot on her calendar.
<</actor-thought>>
<</if>>
<</nobr>>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>
[[Check the ranking board|Class board]]
<</if>>
[[Leave school|After school]]
</div><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="Reviewing the survey draft in class">
<<if !$flags.phone1Read>>
<<set $flags.questHint = "Open your Phone and read the group chat before school will move on.">>
<<actor-thought you>>
I haven't read the draft he sent. I should check the group chat before we start.
<</actor-thought>>
<div class="continue-links">
[[Go home and check Phone|Home][$schoolDay = 3; $gameDate = setup.changeDate($gameDate, 'hours', 2)]]
</div>
<<else>>
<<set $flags.questHint = "">>
<<actor exfriend>>
Hey, I finished the survey draft. You wanna have a look?
<</actor>>
<div class="continue-links">
[[Start Survey]]
</div>
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="ANWO survey on laptop">
<p class="letter">Trial questionnaire. Answer each question, then check whether the summary represents what you meant.</p>
<<include "Section 1">>
<</nobr>><<nobr>>
<<set $score to 0>>
<<set $answer1 = false, $answer2 = false, $answer3 = false, $answer4 = false, $answer5 = false>>
<<set $drawback1 = false, $drawback2 = false, $drawback3 = false, $drawback4 = false, $drawback5 = false>>
<p class="letter-head">ANWO survey</p>
<p class="letter">How familiar are you with the concept of ANWO?<br><br>
[['Very familiar'|Q2][$score+= 1]]<br>
[['Somewhat familiar'|Q2][$score+= 0]]<br>
[['Not familiar at all'|Q2][$score+= -1]]
</p>
<</nobr>><<nobr>>
<p class="letter-head">ANWO survey</p>
<p class="letter">Do you agree with the idea that alpha males should dominate in society?<br><br>
[['Strongly agree'|Q3][$score+= 2]]<br>
[['Agree'|Q3][$score+= 1]]<br>
[['Neutral'|Q3][$score+= 0]]<br>
[['Disagree'|Q3][$score+= -1]]<br>
[['Strongly disagree'|Q3][$score+= -2]]
</p>
<</nobr>><<nobr>>
<p class="letter-head">ANWO survey</p>
<p class="letter">
What are the potential benefits of ANWO? (Check all that apply)<br><br>
Stronger leadership <<checkbox "$answer1" false true>><br>
Increased societal efficiency <<checkbox "$answer2" false true>><br>
Better decision-making <<checkbox "$answer3" false true>><br>
Improved discipline <<checkbox "$answer4" false true>><br>
No benefits <<checkbox "$answer5" false true>><br><br>
What are the potential drawbacks of ANWO? (Check all that apply)<br><br>
Increased bullying <<checkbox "$drawback1" false true>><br>
Social division <<checkbox "$drawback2" false true>><br>
Gender inequality <<checkbox "$drawback3" false true>><br>
Suppression of beta males <<checkbox "$drawback4" false true>><br>
None <<checkbox "$drawback5" false true>>
</p>
<<button [[Next|Q5]]>>
<<if $answer1>><<set $score += 2>><</if>>
<<if $answer2>><<set $score += 2>><</if>>
<<if $answer3>><<set $score += 2>><</if>>
<<if $answer4>><<set $score += 2>><</if>>
<<if $answer5>><<set $score -= 2>><</if>>
<<if $drawback1>><<set $score -= 2>><</if>>
<<if $drawback2>><<set $score -= 2>><</if>>
<<if $drawback3>><<set $score -= 2>><</if>>
<<if $drawback4>><<set $score -= 2>><</if>>
<<if $drawback5>><<set $score += 2>><</if>>
<</button>>
<</nobr>><<nobr>>
<p class="letter-head">ANWO survey</p>
<p class="letter">
Do you think ANWO would positively or negatively affect your life personally?<br><br>
[['Positively'|Survey End][$score+= 2]]<br>
[['Neutral'|Survey End][$score+= 0]]<br>
[['Unsure'|Survey End][$score+= 0]]<br>
[['Negatively'|Survey End][$score+= -2]]
</p>
<</nobr>>
/* Stable legacy landings for saves and history from the older questionnaire. */<<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="The updated questionnaire on the laptop">
<p class="letter-head">Review the questionnaire</p>
<p class="letter">Benefits and drawbacks now share one page. Restart the questionnaire to review both lists and calculate the score together.</p>
<div class="continue-links">[[Restart questionnaire|Start Survey]]</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="The completed questionnaire on the laptop">
<p class="letter-head">Questionnaire complete</p>
<p class="letter">Your answers are ready. Continue to the result, or review the questionnaire from the beginning.</p>
<div class="continue-links">[[View the result|Survey End]] [[Restart questionnaire|Start Survey]]</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="The questionnaire's result page">
<p class="letter-head">ANWO survey result</p>
<p>Your total score: <<= $score>>.</p>
<<if $score > 1>>
<p>The questionnaire records your response as <strong>positive</strong>. Your answers will be counted as support for ANWO.</p>
<<elseif $score < -10>>
<p>The questionnaire records your response as <strong>negative</strong>. Your answers will be counted as opposition to ANWO.</p>
<<else>>
<p>The questionnaire records your response as <strong>neutral</strong>. Neutral responses will be included under <em>no stated opposition</em> in the project summary.</p>
<</if>>
[[Restart Survey | Start Survey]]<br>
[[Discuss Survey]]
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day3-survey-laptop.jpg'" alt="The group checking the questionnaire's summary">
<<set $flags.day3SurveyDone = true>>
<<set $flags.questHint = "">>
<<actor you>>
Why does "neutral" go under "no stated opposition"? I disagree with half of this survey, and now I share a column with people who skipped it.
<</actor>>
<<actor exfriend>>
Those categories came with the assignment. I wrote the questions, not the result page.
<</actor>>
<<actor girlfriend>>
Then put that in the notes. We should ask $teacherName before we use it outside class.
<</actor>>
<p>$exfriendName adds a comment beside the result table. He includes the wording of the category and the name of the supplied template.</p>
<<actor exfriend>>There. If she wants it changed, she can tell us what to use instead.<</actor>>
<<actor bully>>
Ask her now. I'm getting lunch when the bell goes.
<</actor>>
<<actor-thought you>>
At least the objection is on the draft. I'll see whether it survives the next version.
<</actor-thought>>
<div class="continue-links">
<<link "Head home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day31-data-audit.jpg'" alt="The group checking survey data on a laptop">
<<actor teacher>>
Before anyone builds a final deck, audit the source data. If a total cannot be traced to an interview, it does not go on a council slide.
<</actor>>
<p class="scene-lead delayed">$teacherName's back is turned at the front, and at your group table one column is wrong. Twelve answers from your park interviews were pasted into the school sample. The result came out tidier than it had any right to be.</p>
<<actor exfriend>>
I didn't write that formula. I checked the source tab yesterday. Someone changed the sheet.
<</actor>>
<<actor bully>>
Can we fix it before lunch? I've still got my part to finish.
<</actor>>
<<actor girlfriend>>
He has the original notes. Give him the laptop.
<</actor>>
<<actor-thought you>>
For once the whole table waits on you. You spread the interview pages beside the laptop and find the first misplaced answer.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Correct the sample and explain every changed row.">>
<<set $flags.day31DataAuditDone = true>>
<<set $flags.day31Contribution = "corrected">>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor exfriend>>Those twelve are field interviews. I'll move them and run the totals again.<</actor>>
<<actor girlfriend>>Good catch. Put your name on the audit note. I nearly sent that version to the teacher.<</actor>>
<div class="delayed continue-links">[[Leave school|After school]]</div>
<</you-choice>>
<<you-choice "Show him the rows and let him present the correction.">>
<<set $flags.day31DataAuditDone = true>>
<<set $flags.day31Contribution = "shared">>
<<actor exfriend>>Okay, I see the wrong rows. I'll fix the sheet. Your notes stay attached.<</actor>>
<<actor girlfriend>>Put both names on it. Finding the error counts too.<</actor>>
<div class="delayed continue-links">[[Leave school|After school]]</div>
<</you-choice>>
<<you-choice "Quietly repair the totals before anyone argues.">>
<<set $flags.day31DataAuditDone = true>>
<<set $flags.day31Contribution = "quiet">>
<<actor bully>>Numbers moved. We good now? Nice ghost trick, man.<</actor>>
<<actor girlfriend>>Wait, which rows did you change? I need to put that in the audit note.<</actor>>
<div class="delayed continue-links">[[Leave school|After school]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day34-hallway-talk.jpg'" alt="Jenny speaking privately with her boyfriend in the school hallway">
<<set _contribution = $flags.day31Contribution || "legacy">>
<p class="scene-lead">$girlfriendName catches your sleeve outside the library and waits until the others round the corner.</p>
<<if _contribution eq "corrected">>
<p class="scene-lead">Your name is already on the audit note.</p>
<<elseif _contribution eq "shared">>
<p class="scene-lead">$exfriendName attached both names to the correction, but the presentation still needs to show who found the bad rows.</p>
<<elseif _contribution eq "quiet">>
<p class="scene-lead">The totals are fixed, but the draft does not say who found the problem.</p>
<<else>>
<p class="scene-lead">The field section still needs a name beside the correction.</p>
<</if>>
<<actor girlfriend>>
$exfriendName reran the totals. Your interview notes saved the field section.
<<if _contribution eq "corrected">>You claimed the correction, so I kept your name on it.<<elseif _contribution eq "shared">>He gets credit for rerunning the sheet. You still get credit for finding the bad rows.<<elseif _contribution eq "quiet">>You fixed it and nearly let the draft erase you. I am not letting that happen by accident.<<else>>I can make the slide say that.<</if>>
When someone asks about it, you answer. We can practice together if you want.
<</actor>>
<p class="delayed">She folds the corner of the draft, sees the crease, and smooths it flat.</p>
<<actor you>>Are you nervous too?<</actor>>
<<actor girlfriend>>I practiced my opening in the bathroom. Someone asked if I was talking to them.<</actor>>
<<actor you>>Were they any help?<</actor>>
<<actor girlfriend>>They told me to move away from the hand dryer.<</actor>>
<p class="delayed">You laugh, and she does too. She leaves the bent corner alone and looks back at you.</p>
<span id="conv"></span>
<div id="options">
<<you-choice "Put my audit credit on the slide.">>
<<set $flags.day34PresentationTalkDone = true>>
<<set $flags.day34JennyStance = "credit">>
<<actor girlfriend>>I will. Your name goes beside the correction. If you want to run the answer past me, I'm free after class.<</actor>>
<div class="delayed continue-links">[[Go back to class|After school]]</div>
<</you-choice>>
<<you-choice "I want us to present that section together.">>
<<set $flags.day34PresentationTalkDone = true>>
<<set $flags.day34JennyStance = "together">>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>Okay. I'll introduce it, then you explain the correction. And if I start talking too fast, give me a look. You know the one.<</actor>>
<div class="delayed continue-links">[[Return to class with her|After school]]</div>
<</you-choice>>
<<you-choice "Manage the slide. I won't freeze when you give me the question.">>
<<set $flags.day34PresentationTalkDone = true>>
<<set $flags.day34JennyStance = "managed">>
<<actor girlfriend>>Then listen for my cue. I can give you the opening, not the answer. After that, your voice has to carry the rest.<</actor>>
<div class="delayed continue-links">[[Follow her back to class|After school]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set _fridayStage = $flags.fridayDateStage || 0>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act2/day35-jenny-s42.webp'" alt="Jenny at classroom desk">
<<actor teacher>>
Your final presentations are approaching. Use this session to coordinate the remaining work.
<</actor>>
<<actor bully>>
I'll open. $exfriendName has the totals, and $girlfriendName has the main argument.
The field section is yours, $youName. You caught the sample error, so you can explain it.
<</actor>>
<<actor bestfriend>>
Look at him getting an actual speaking part. Try not to make $girlfriendName regret it.
<</actor>>
<<actor girlfriend>>
Your corrected notes are already in the deck.
Bring the handouts too, but the field answer is yours. Don't hide from it.
<</actor>>
<<actor-thought you>>
She checks the key against her blouse while she talks. $bestfriendName follows your eyes and grins.
<</actor-thought>>
<p class="delayed">Break time. $bestfriendName leans across the table, voice carrying one decibel too loud.</p>
<<actor bestfriend>>
<<if _fridayStage gte 6>>
So... Friday. $bullyName, $exfriendName, or both again? I need to know how many drinks he is buying.
<<elseif _fridayStage gte 5>>
So... they both get a Friday now. Did he pay for both dates too?
<<elseif _fridayStage gte 4>>
So... $bullyName got his Friday. Is $exfriendName next? Look at him pretending he doesn't want to know.
<<elseif _fridayStage gte 1>>
So... how much has Friday cost him so far? He goes quiet every time you mention the bill.
<<else>>
So... did $girlfriendName show you her Friday plan yet? $bullyName, $exfriendName, maybe both. You get the house.
<</if>>
<</actor>>
<<actor girlfriend>>
$bestfriendName. Not here.
<</actor>>
<<actor bestfriend>>
<<if _fridayStage gte 1>>
I'm asking because his wallet keeps coming with you. He can answer.
<<else>>
You told me the plan at breakfast. Blame yourself for giving me material.
<</if>>
<</actor>>
<<actor exfriend>>
Can we not do this in public?
<</actor>>
<<actor bestfriend>>
You should see his face. He knows everyone heard me.
<</actor>>
<<actor-thought you>>
Someone three tables away looks over <<if _fridayStage gte 4>>when $bestfriendName says both names<<elseif _fridayStage gte 1>>when $bestfriendName mentions your wallet<<else>>when $bestfriendName lists her plans<</if>>. You stare down at your notes.
<<if _fridayStage gte 4>>
She is laughing about nights that already happened, and your face gives her every answer she wants.
<<elseif _fridayStage gte 1>>
You paid for Friday. Nobody else at this table needed to hear that.
<<else>>
None of those nights has happened yet, but $bestfriendName says it like the plans are settled.
<</if>>
<</actor-thought>>
<<run setup.nudgeArousal(12)>>
<</nobr>>
<div id="conv"></div>
<div id="options">
<<you-choice "Put your head down and wait for it to pass.">>
<<set $flags.day35PublicHumiliationDone = true>>
<<run setup.applyRecognition("owned-day35-head-down")>>
<<actor girlfriend>>
Hey. Look at me.
$bestfriendName is being loud because she knows you'll react.
<<if _fridayStage gte 1>>Friday still costs money, and it is still yours.<<else>>The plan stays private until I say otherwise.<</if>>
Now stop sulking and act normal.
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<run setup.nudgeArousal(8)>>
<p class="delayed">The bell rings. Nobody else mentions it. Everyone heard it.</p>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>
[[Check the ranking board|Class board]]
<</if>>
[[Leave school|After school]]
</div>
<</you-choice>>
<<identity-choice resistance "Say: she said plans, not permission to announce them.">>
<<set $flags.day35PublicHumiliationDone = true>>
<<actor bestfriend>>
Oh, he finally found a boundary. Took you long enough.
<</actor>>
<<actor bully>>
Fair complaint. About ten minutes late, but fair.
<</actor>>
<<run setup.applyIdentity("owned-day35-boundary")>>
<<run setup.applyRecognition("owned-day35-boundary")>>
<<run setup.nudgeArousal(10)>>
<<actor girlfriend>>
Don't start fights you can't finish, baby.
Class. Now. We'll talk about what $bestfriendName gets to repeat at home.
<</actor>>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>
[[Check the ranking board|Class board]]
<</if>>
[[Leave school|After school]]
</div>
<</identity-choice>>
<<you-choice "Laugh along. Fake it.">>
<<set $flags.day35PublicHumiliationDone = true>>
<<actor bestfriend>>
He's laughing now. Give him ten minutes and he'll be hiding in his notes again. /* prose-ok: Alessia's spoken dig, the 'again' counts how often he does this */
<</actor>>
<<actor girlfriend>>
You're forcing that laugh so hard, baby.
Just breathe and get through class.
<</actor>>
<<run setup.applyRecognition("owned-day35-laugh")>>
<<run setup.peakArousal()>>
<div class="continue-links">
<<if setup.classRankingHasUpdate()>>
[[Check the ranking board|Class board]]
<</if>>
[[Leave school|After school]]
</div>
<</you-choice>>
</div><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day37-hidden-slide.jpg'" alt="Tom with a buzz cut and Jamal stand behind the MC at a laptop showing the hidden chastity-key slide, Alessia leaving through the door">
<<set _fridayStage = $flags.fridayDateStage || 0>>
<p class="scene-lead">Rehearsal ends. The laptop is still on. $bestfriendName steps out to take a phone call, leaving private material she never showed the group. A slide displays $girlfriendName's chastity key beneath the word <em>MANAGED</em>. <<if _fridayStage gte 1>>The thumbnail beside it is a duplicate <strong>FIELD EXPENSES</strong> slide with your Friday receipts mixed into the project costs. Neither edit was approved. If they survive into the final deck, the whole class sees them on presentation day.<<else>>The slide was never approved. If it survives into the final deck, the whole class sees it on presentation day.<</if>></p>
<<actor exfriend>>
That isn't project evidence. If she sends <<if _fridayStage gte 1>>those edits<<else>>that slide<</if>>, the council gets it with all our names on it.
<</actor>>
<<actor bully>>
She can show it on her own time. I'm not losing marks over her joke.
<</actor>>
<<actor-thought you>>
$bestfriendName could walk back any second. You have maybe a minute. The cage sits cold around your soft cock while you stare at the key on the screen, bigger than the real one on $girlfriendName's chest. You could warn her now. You could photograph what changed and preserve the edit history. Or you could say nothing and let presentation day decide how many people see proof that you are locked on a council slide.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I want you to see this now and remove everything.">>
<<set $flags.day37SlideDecision = "warn">>
<<actor girlfriend>>She used the shared folder after I locked the deck. Okay. I'll remove every private edit and watch the final upload myself.<</actor>>
<<actor bestfriend>>$girlfriendName just took over the final upload because you panicked at one slide.<</actor>>
<div class="delayed continue-links">[[Leave after rehearsal|After school]]</div>
<</you-choice>>
<<you-choice "I'm saving the draft and its edit history.">>
<<set $flags.day37SlideDecision = "document">>
<<actor exfriend>>Good. Save the log too. Then we can prove she added it after approval.<</actor>>
<<actor bestfriend>>Save the log. $girlfriendName can file it beside the slide about who manages you.<</actor>>
<div class="delayed continue-links">[[Pocket your phone and leave|After school]]</div>
<</you-choice>>
<<you-choice "I'm leaving it alone. I won't say anything.">>
<<set $flags.day37SlideDecision = "leave">>
<<actor bestfriend>>Keep quiet. $girlfriendName can find the slide herself if it reaches the projector.<</actor>>
<<actor girlfriend>>$bestfriendName, close it. We're done for today.<</actor>>
<p class="delayed">$bestfriendName closes the preview. The shared-folder icon flashes once before the laptop shuts, and you do not ask which copy she saved.</p>
<div class="delayed continue-links">[[Go home without warning anyone|After school]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day39-field-rehearsal.jpg'" alt="Jenny passing the field question to her boyfriend during rehearsal">
<<set _slideDecision = $flags.day37SlideDecision || "legacy">>
<<set _jennyStance = $flags.day34JennyStance || "legacy">>
<<if _slideDecision eq "warn">>
<p class="scene-lead">$girlfriendName has the clicker now. $bestfriendName is allowed to watch the deck, not edit it.</p>
<<actor bestfriend>>He warned her, she locked the file, and now we all get the boring approved version. Happy?<</actor>>
<<elseif _slideDecision eq "document">>
<p class="scene-lead">$exfriendName checks the edit-history photo against the approval log before the teacher starts.</p>
<<actor exfriend>>I attached your screenshot to the approval log. If her slide returns, the timestamp settles it.<</actor>>
<<elseif _slideDecision eq "leave">>
<p class="scene-lead">$bestfriendName sits nearest the laptop. The hidden slide is still somewhere in the deck, and $exfriendName keeps glancing toward her hand.</p>
<<actor exfriend>>If that private slide appears tomorrow, I am telling the council it was never approved.<</actor>>
<</if>>
<<actor teacher>>
I have one rehearsal question. Why did the park interviews differ from the classroom sample?
<</actor>>
<p class="scene-lead delayed">$bullyName checks the clock. $exfriendName opens the corrected sheet. $girlfriendName moves her notes aside so she can look directly at you.</p>
<<actor girlfriend>>
<<if _jennyStance eq "credit">>You asked for your name on this section. Take the question yourself.<<elseif _jennyStance eq "together">>We agreed to present this together. I open, then you explain the correction.<<elseif _jennyStance eq "managed">>I am handing you the question exactly like I promised. Take it.<<else>>Those are your interviews, so this is your answer.<</if>>
Show me what you are putting on the screen tomorrow. Speak up.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "Explain the sampling difference and the corrected totals.">>
<<set $flags.day39RehearsalDone = true>>
<<set $flags.day39RehearsalResult = "answered">>
<<actor teacher>>The answer is specific and supported by your field notes. Use it tomorrow.<</actor>>
<<actor girlfriend>>That was clear. Keep the example about the park; it helped me follow you.<</actor>>
<div class="delayed continue-links">[[Finish rehearsal|After school]]</div>
<</you-choice>>
<<you-choice "Start the answer, then ask him to confirm the totals.">>
<<set $flags.day39RehearsalDone = true>>
<<set $flags.day39RehearsalResult = "shared">>
<<actor exfriend>>The corrected totals support his explanation. The samples were collected in different settings.<</actor>>
<<actor teacher>>That is a valid shared answer. Lead with your observation tomorrow.<</actor>>
<<actor girlfriend>>That handover worked. Leave a pause so he knows when to come in.<</actor>>
<div class="delayed continue-links">[[Pack the laptop|After school]]</div>
<</you-choice>>
<<you-choice "Lose the first sentence and let her step in.">>
<<set $flags.day39RehearsalDone = true>>
<<set $flags.day39RehearsalResult = "froze">>
<<actor girlfriend>>The park group answered without classmates watching. That's why the response shifted.<br>Baby, breathe. Write the first sentence on your notes. We can try it once more before we leave.<</actor>>
<div class="delayed continue-links">[[Leave the empty room with her|After school]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set $storyAct = 3>>
<<set $storyBeat = "final-ranking">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-class-arrival.jpg'" alt="the project group preparing for the final presentation">
<<actor teacher>>
Final presentations begin today. The council will post the class's final ranking for this project cycle after the last group.
Your evaluation will include the slides, division of work, and results. The provisional period ends this afternoon.
<</actor>>
<<actor-thought you>>
The key rests against $girlfriendName's blouse. $bullyName stands beside the screen. $exfriendName has the laptop.
You grip the handouts with both hands. The cage rubs against you with every step toward the front.
<</actor-thought>>
<<actor bully>>
Slides are ready. $exfriendName has the numbers. $girlfriendName talks.
$youName, take the field question. You fixed the sample, so do not hand it back to us.
<</actor>>
<<actor bestfriend>>
One field answer after forty days of handouts. Don't drop it.
<</actor>>
<div class="continue-links delayed">[[Take your place beside the screen|Day 40 Presentation]]</div>
</div>
<</nobr>><<nobr>>
<<set _fridayStage = $flags.fridayDateStage || 0>>
<<set _slideDecision = $flags.day37SlideDecision || "legacy">>
<<set _rehearsal = $flags.day39RehearsalResult || "legacy">>
<<set _contribution = $flags.day31Contribution || "legacy">>
<<set _jennyStance = $flags.day34JennyStance || "legacy">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-final-ranking.jpg'" alt="the group leader presenting the final project">
<p class="scene-lead">$girlfriendName takes the center. $bullyName opens with the argument, $exfriendName explains the totals, and then your corrected field sample appears with your name beside it.</p>
<<actor girlfriend>>
Our group worked because the jobs were clear. $bullyName led the pitch, $exfriendName organized the data, and $youName collected the field interviews.
<<if _contribution eq "corrected" || _jennyStance eq "credit">>He found and documented the sample error. The correction belongs to him.<<elseif _contribution eq "shared" || _jennyStance eq "together">>He found the bad rows, and $exfriendName reran the totals. The correction credit is shared.<<elseif _contribution eq "quiet">>He repaired the sample before the draft named him. The audit note now records that work.<<else>>He caught the sample error, and the correction belongs to him.<</if>>
I managed the final report.
<</actor>>
<<actor bestfriend>>
<<if _slideDecision eq "warn">>You deleted the last slide. Better check every copy.<<else>>Get to the last slide. His field credit left out $girlfriendName's key.<</if>>
<</actor>>
<<actor girlfriend>>
<<if _slideDecision eq "warn">>The upload is locked. We are presenting the work now.<<else>>Not yet, $bestfriendName. We are presenting the work first.<</if>>
<</actor>>
<p class="delayed">The role table is plain: pitch, data, report, field research. Your name is beside the interviews and the correction note. Nobody can call it equal work, but nobody can call it imaginary either.</p>
<<actor-thought you>>
<<if _rehearsal eq "answered">>You give the answer from rehearsal and keep your first sentence. The teacher nods before you finish.<<elseif _rehearsal eq "shared">>You explain the sampling difference, then let $exfriendName confirm the totals. It is still your observation on the screen.<<elseif _rehearsal eq "froze">>The first sentence catches in your throat. $girlfriendName says your name once, and this time you force the answer out.<<else>>The council asks about the sample correction. You answer from your notes while $girlfriendName waits beside the screen.<</if>>
The cage shifts when you pick up the handouts, but the question had nothing to do with it.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll present the corrected field result myself.">>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>
Good. Clear answer. Now let the work stand.
<</actor>>
<div class="delayed">
<<if _fridayStage gte 1 && _slideDecision neq "warn">>[[Wait for the evidence slide|Day 40 Friday slide]]<<else>>[[Wait for the council framework|Day 40 Hierarchy slide]]<</if>>
</div>
<</you-choice>>
<<you-choice "Take the question with me.">>
<<actor girlfriend>>I set up the result. You explain why it changed. We can share a microphone without sharing every sentence.<</actor>>
<div class="delayed">
<<if _fridayStage gte 1 && _slideDecision neq "warn">>[[Continue to the expense slide|Day 40 Friday slide]]<<else>>[[Continue to the council framework|Day 40 Hierarchy slide]]<</if>>
</div>
<</you-choice>>
<<you-choice "I'll give the short answer and return to the handouts.">>
<<actor teacher>>Your answer was concise and correct. The audit note will remain attached to the final report.<</actor>>
<div class="delayed">
<<if _fridayStage gte 1 && _slideDecision neq "warn">>[[Let the expense slide load|Day 40 Friday slide]]<<else>>[[Let the council framework load|Day 40 Hierarchy slide]]<</if>>
</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set _fridayStage = $flags.fridayDateStage || 0>>
<<set _slideDecision = $flags.day37SlideDecision || "legacy">>
<<if _fridayStage lt 1 || _slideDecision eq "warn">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-presentation-friday.jpg'" alt="the approved field expenses slide">
<p class="scene-lead">The approved expense summary contains only project costs. There are no private Friday receipts to present.</p>
<div class="continue-links">[[Continue to the council framework|Day 40 Hierarchy slide]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-presentation-friday.jpg'" alt="The field expenses slide with private Friday receipts hidden between legitimate project costs">
<p class="scene-lead">The next slide is labeled <strong>FIELD EXPENSES.</strong> It should contain transit and survey costs. $bestfriendName has tucked your private Friday receipts between the legitimate entries.</p>
<<actor girlfriend>>
Those Friday receipts are real, but they are not project expenses.
$bestfriendName, you had access to the shared folder for formatting. Not this.
<</actor>>
<<actor bestfriend>>
Your Friday receipts were in the shared folder. Now they're on the projector.
<</actor>>
<<if _slideDecision eq "document">>
<<actor-thought you>>The edit-history photo on your phone shows exactly when she inserted this slide. The same record covers the key photo waiting later in the deck.<</actor-thought>>
<</if>>
<<actor bully>>
<<if _fridayStage gte 6>>
The numbers check out. Separate dinners, both names, then one ninety-dollar Friday. That's a pattern.
<<elseif _fridayStage gte 5>>
The numbers check out. He paid for my Friday and $exfriendName's. Separate receipts, same wallet.
<<elseif _fridayStage gte 4>>
That one is mine. He paid, she went out, everybody got home. Successful expense.
<<elseif _fridayStage gte 3>>
Three dinners with his keyholder, and he covered every one. Embarrassing budget.
<<elseif _fridayStage gte 2>>
One normal date, then one with the key on the table. He paid for both.
<<else>>
One dinner with his girlfriend. Embarrassing receipt to project, but not exactly a conspiracy.
<</if>>
<</actor>>
<<actor-thought you>>
You recognize every amount because it came out of your wallet. A student near the window follows one highlighted row, then looks from you to $bullyName.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll keep handing out sheets and not look at the screen.">>
<<run setup.applyRecognition("final-receipts-silent")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>
Stay focused. I will deal with the slide. You finish the sheets.
<</actor>>
<div class="delayed">[[Continue to the council framework|Day 40 Hierarchy slide]]</div>
<</you-choice>>
<<identity-choice resistance "Say: those are private receipts, not project data.">>
<<run setup.applyIdentity("final-receipts-private")>>
<<run setup.applyRecognition("final-receipts-private")>>
<<actor bestfriend>>
You needed a projector to say one full sentence.
<</actor>>
<<actor bully>>
He is right. Those are his receipts. Still funny, though.
<</actor>>
<<if _slideDecision eq "document">>
<<actor you>>I saved the edit history. She added this after the group approved the deck.<</actor>>
<<actor teacher>>The approval log already contains your record. Continue. This slide will not count toward the group evaluation.<</actor>>
<</if>>
<div class="delayed">[[Make her continue to the council framework|Day 40 Hierarchy slide]]</div>
<</identity-choice>>
<<you-choice "Confirm that you paid the highlighted receipts.">>
<<run setup.applyRecognition("final-receipts-confirm")>>
<<run setup.peakArousal()>>
<<actor girlfriend>>
Clear answer. No extra details. Let me handle the rest.
<</actor>>
<div class="delayed">[[Face the council framework|Day 40 Hierarchy slide]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<set _youRank = setup.getPlayerClassRank()>>
<<set _slideDecision = $flags.day37SlideDecision || "legacy">>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-presentation-hierarchy.jpg'" alt="The hierarchy slide showing the class ranking structure">
<p class="scene-lead">The screen refreshes to the council's project-role chart: leadership, organization, management, and field support. The current class ranking appears in a separate column.</p>
<<actor girlfriend>>
This is how the council divided the project roles.
$bullyName led the pitch. $exfriendName organized the data. I managed the report.
$youName handled field support. <<if _youRank>>His current classification is <<print _youRank.band>> at rank #<<print _youRank.rank>>.<<else>>The council is still calculating his classification.<</if>>
<</actor>>
<<actor bully>>
<<if _youRank and _youRank.rank eq 1>>Field support and first overall. Did not expect that line to land above mine.<<elseif _youRank and _youRank.isAlpha>>Field support with an Alpha score. Weird combination, but the board counted it.<<else>>Field support in the Beta half. Rough place to stand next to the screen.<</if>>
<</actor>>
<<actor bestfriend>>
He's still staring at the number beside his name.
<<if _youRank and _youRank.isAlpha>><<if _slideDecision eq "warn">>The form says Alpha. He ran to $girlfriendName over one slide.<<else>>The form says Alpha. $girlfriendName's key is waiting on the last slide.<</if>><<else>><<print _youRank ? _youRank.band : "Beta">>, printed beside his name on the council form.<</if>>
<</actor>>
<<actor exfriend>>
Those interviews are his. We missed the deadlines, so his support score dropped. It's on the sheet.
<</actor>>
<<actor-thought you>>
<<if _youRank>>Your name is #<<print _youRank.rank>>, followed by <em><<print _youRank.band>>.</em><<else>>Your name flickers while the board refreshes.<</if>> Students turn toward you, then toward $girlfriendName and the key on her blouse.
Your face burns before anyone says a word.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll stand still and let the room see the chart.">>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<div class="delayed"><<if _slideDecision eq "warn">>[[Wait for the approved summary|Day 40 Honest slide]]<<else>>[[Wait for the last slide|Day 40 Honest slide]]<</if>></div>
<</you-choice>>
<<you-choice "Say: the interviews should count for more.">>
<<run setup.applyIdentity("final-role-defend")>>
<<run setup.applyRecognition("final-role-defend")>>
<div class="delayed"><<if _slideDecision eq "warn">>[[Sit down before the approved summary|Day 40 Honest slide]]<<else>>[[Sit down before the honest slide|Day 40 Honest slide]]<</if>></div>
<</you-choice>>
<<you-choice "I'll read the council classification aloud.">>
<<run setup.applyIdentity("final-role-read")>>
<<run setup.applyRecognition("final-role-read")>>
<<run setup.peakArousal()>>
<div class="delayed"><<if _slideDecision eq "warn">>[[Let the approved summary replace it|Day 40 Honest slide]]<<else>>[[Let the classification settle|Day 40 Honest slide]]<</if>></div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
<<set _slideDecision = $flags.day37SlideDecision || "legacy">>
<div class="scene-panel compact">
<<if _slideDecision eq "warn">>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-final-ranking.jpg'" alt="the group leader presenting the approved final summary">
<p class="scene-lead">$girlfriendName advances to the approved final summary. $bestfriendName presses the spare clicker once, but nothing changes. The locked deck contains only the group's work.</p>
<<actor girlfriend>>
The upload is locked. We are finishing with the work the group approved.
<</actor>>
<<actor bestfriend>>
$girlfriendName locked my clicker. Finish your handouts, hall monitor.
<</actor>>
<<actor-thought you>>
The council sees the summary and your correction credit. Nothing from your private life follows them onto the screen.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll finish the handouts and let the work stand.">>
<<set $flags.day40PresentationDone = true>>
<<set $flags.day40PrivateSlideState = "removed">>
<<set $flags.day40SlideChallenged = false>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>Good. Take your seat.<</actor>>
<div class="delayed">[[Wait for the council result|Final ranking reveal]]</div>
<</you-choice>>
</div>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-presentation-honest.jpg'" alt="the unauthorized MANAGED slide showing the keyholder's chastity key">
<p class="scene-lead">$girlfriendName reaches for the final summary, but $bestfriendName clicks first. The hidden slide fills the screen with the key against $girlfriendName's blouse and one word beneath it: <strong>MANAGED.</strong></p>
<<actor girlfriend>>
$bestfriendName. That is not the summary slide.
That slide was never approved. Take it off the screen.
<</actor>>
<<actor bestfriend>>
His field credit leaves out the key on $girlfriendName's blouse. The next slide puts it back.
<</actor>>
<<actor bully>>
That picture is private. It does not belong in a school presentation. Take it down.
<</actor>>
<<actor exfriend>>
Take it down before the council sees it. And before another phone comes out.
<</actor>>
<<actor-thought you>>
The room goes quiet long enough for everyone to understand the key photo.
$girlfriendName closes the laptop. Several phones disappear under desks. She glares at $bestfriendName, then turns the same hard look on you.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "I'll finish the handouts. Close the slide.">>
<<set $flags.day40PresentationDone = true>>
<<set $flags.day40PrivateSlideState = "exposed">>
<<set $flags.day40SlideChallenged = false>>
<<run setup.applyRecognition("final-honest-silent")>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<actor girlfriend>>
Good. Keep moving.
$bestfriendName and I will discuss her editing privileges later.
<</actor>>
<div class="delayed">[[Wait for the council result|Final ranking reveal]]</div>
<</you-choice>>
<<identity-choice resistance "Say: that slide was private and never approved.">>
<<set $flags.day40PresentationDone = true>>
<<set $flags.day40PrivateSlideState = "exposed">>
<<set $flags.day40SlideChallenged = true>>
<<run setup.applyIdentity("final-honest-object")>>
<<run setup.applyRecognition("final-honest-object")>>
<<if _slideDecision eq "document">>
<<actor you>>The same edit history covers this slide. $bestfriendName added it after approval.<</actor>>
<<actor teacher>>I have the record. The private slide will not count toward your group evaluation.<</actor>>
<</if>>
<<actor bully>>
He is right about one thing. That was not project data.
<</actor>>
<<actor bestfriend>>
The approval log does not change whose key it is or whose lock you wear.
<</actor>>
<div class="delayed">[[Sit down before the council result|Final ranking reveal]]</div>
<</identity-choice>>
<<you-choice "The key photo is real. It was private and never belonged in this project.">>
<<set $flags.day40PresentationDone = true>>
<<set $flags.day40PrivateSlideState = "exposed">>
<<set $flags.day40SlideChallenged = false>>
<<run setup.applyRecognition("final-honest-admit")>>
<<run setup.peakArousal()>>
<<actor girlfriend>>
That is enough. Look at me, baby, and stop helping $bestfriendName.
<</actor>>
<div class="delayed">[[Let the council replace the gossip|Final ranking reveal]]</div>
<</you-choice>>
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<<set _youRank = $flags.finalRankingSeen ? setup.getFinalRankingResult() : setup.getPlayerClassRank()>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/owned/day40-final-board-base.jpg'" alt="The teacher announcing the final result beside a neutral projection screen">
<<if $flags.finalRankingSeen>>
<p class="scene-lead">Your response to the council result is already settled. <<if _youRank>>Your recorded result for that project cycle is <<print _youRank.band>> at rank #<<print _youRank.rank>>.<</if>> The class board still tracks later work and today's public ranking.</p>
<div class="continue-links">[[Check the class board|Class board]] [[Go home|Home]]</div>
<<else>>
<<actor teacher>>
The council has approved the final list for this project cycle.
<<if _youRank and _youRank.rank eq 1>>Your name is ranked first at <<print _youRank.band>>, ahead of $bullyName.<<elseif _youRank and _youRank.isAlpha>>Your rank is #<<print _youRank.rank>>, classified as <<print _youRank.band>>.<<else>>Your rank is #<<print _youRank.rank>>, classified as <<print _youRank ? _youRank.band : "Beta">>.<</if>>
<<if $flags.day39RehearsalResult eq "answered">>You receive credit for the field audit in the final report. <</if>>$exfriendName's comparison score is on the board, and $girlfriendName receives a group management commendation.
<</actor>>
<p class="delayed"><<if _youRank && _youRank.rank eq 1>>A student at the next table leans over to ask how you caught the sample error. $bullyName checks the top two names a second time.<<else>>The room murmurs as people find their names. $exfriendName turns his copy so you can see the field-work credit.<</if>></p>
<<actor bully>>
<<if _youRank and _youRank.rank eq 1>>You took the top line. All right, you beat me.<<elseif _youRank and _youRank.isAlpha>>You moved up. Guess those interviews were worth the walk.<<else>><<print _youRank ? _youRank.band : "Beta">>. Rough result. I'm getting lunch.<</if>>
<</actor>>
<<actor bestfriend>>
<<if _youRank and _youRank.rank eq 1>>He's checked it three times, $girlfriendName. Somebody get him a frame.<<elseif _youRank and _youRank.isAlpha>>He's fixing his shirt for the group photo already.<<else>>Forty days of notes, and Beta is still printed beside his name.<</if>>
<</actor>>
<<actor girlfriend>>
<<if _youRank and _youRank.rank eq 1>>You finished first. I'm proud of you. Give me a second, I want to look at it.<<elseif _youRank and _youRank.isAlpha>>Your name, your work. Let yourself enjoy it for a minute.<<else>>The field correction is in the report under your name. We can talk about the rest when we're out of this room.<</if>>
<</actor>>
<p class="delayed">She finds her own commendation further down the page and smiles. For a moment, you look at the report together while the room empties around you.</p>
<span id="conv"></span>
<div id="options">
<<if _youRank and _youRank.isAlpha>>
<<identity-choice resistance "Read your Alpha classification yourself.">>
<<run setup.recordFinalRanking()>>
<<set $flags.ownedPublicRoleAccepted = true>>
<<run setup.applyIdentity("final-label-claim")>>
<<actor you>><<print _youRank.band>>. Rank #<<print _youRank.rank>>.<</actor>>
<<actor girlfriend>>Keep a copy. I want to read it with you later.<</actor>>
<div class="delayed continue-links">[[Check the final board|Class board]] [[Go home|Home]]</div>
<</identity-choice>>
<<else>>
<<identity-choice devotion "Read the classification yourself.">>
<<run setup.recordFinalRanking()>>
<<set $flags.ownedPublicRoleAccepted = true>>
<<run setup.applyIdentity("final-label-read")>>
<<run setup.peakArousal()>>
<<actor you>><<print _youRank ? _youRank.band : "Beta">>.<</actor>>
<<actor girlfriend>>Clear voice. Everyone heard you.<</actor>>
<div class="delayed continue-links">[[Check the final board|Class board]] [[Go home|Home]]</div>
<</identity-choice>>
<</if>>
<<identity-choice resistance "Tell them the list is a joke.">>
<<run setup.recordFinalRanking()>>
<<set $flags.ownedPublicRoleAccepted = false>>
<<run setup.applyIdentity("final-label-reject")>>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)>>
<<actor girlfriend>>
You can hate the label. You still did the work they scored.
We'll talk at home, without a projector and without $bestfriendName editing the conversation.
<</actor>>
<<actor bestfriend>>
He waits until the final result to object. Great timing, loser.
<</actor>>
<div class="delayed continue-links">[[Check the final board|Class board]] [[Go home before the debrief|Home]]</div>
<</identity-choice>>
<<identity-choice devotion "Thank $girlfriendName for managing you.">>
<<run setup.recordFinalRanking()>>
<<set $flags.ownedPublicRoleAccepted = true>>
<<run setup.applyIdentity("final-label-thank")>>
<<run setup.peakArousal()>>
<<actor girlfriend>>
Aww. You're welcome.
I'll explain the difference between a council result and my rules at home.
<</actor>>
<div class="delayed continue-links">[[Check the final board|Class board]] [[Follow your keyholder home|Home]]</div>
<</identity-choice>>
</div>
<</if>>
</div>
<</nobr>><<nobr>>
<<set $flags.fieldSurveyOpen = true>>
<<set $flags.questHint = "Field interviews: Park (before 22:00) and step-sister (before 18:00).">>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day5-field-park.jpg'" alt="field survey work">
/* --- Social --- */
<p class="delayed">
Before class, your group clusters near the lockers. $exfriendName has the marked questionnaire clipped over a stack of blank copies.
</p>
<<actor exfriend>>
$teacherName approved the draft. We keep the standard result categories and record any objections beside the answers. Now everybody needs to interview at least two people.
<</actor>>
<<actor bestfriend>>
Can we ask people we know? Or does she want us stopping strangers?
<</actor>>
<<actor bully>>
I'll ask the guys after training. They'll answer if I keep it short.
<</actor>>
<<actor girlfriend>>
Write down where you asked them. We need that for the methods page.
<</actor>>
/* --- Class --- */
<p class="delayed">Class is mostly project time. $teacherName moves from group to group, checking every page.</p>
<<actor teacher>>
The fieldwork assignment assesses whether you can approach strangers and collect useful answers. Each student is expected to complete it.
<</actor>>
<p>She stops beside your desk and checks that you have taken a copy.</p>
<<actor bully>>
If your boyfriend freezes up in the park, $girlfriendName, I'll handle the charm portion.
<</actor>>
<<actor girlfriend>>
He can ask two people. Let him answer for himself.
<</actor>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/act1/day5-manage.jpg'" alt="Jenny giving the MC calm instructions while the project group watches">
<<actor bestfriend>>
Did you pack his questionnaire too, or can he manage that part?
<</actor>>
<p>$girlfriendName turns to you, waiting. Your face warms as you realize she has already promised the group an answer.</p>
<<actor-thought you>>I was about to say yes anyway. Now everyone is waiting to see whether I can manage it.<</actor-thought>>
<<run setup.nudgeArousal(12)>>
/* --- Private --- */
<<actor exfriend>>
I'll put a copy online as well. Separate totals, so we can compare them with the interviews.
<</actor>>
<<actor you>>
I'll ask my step-sister. And someone at the park.
<</actor>>
<<actor girlfriend>>
Text me when you're done. If someone gives you a hard time, you can ask someone else. You don't have to finish with the first person you stop.
<</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice resistance "The survey already steers people toward ANWO.">>
<<actor exfriend>>I left the comment on the draft. I'm not taking the blame for changing her form without permission.<</actor>>
<<actor girlfriend>>I asked her. She wants the same form from every group. Keep your notes and we'll bring it up in the presentation.<</actor>>
<p>She holds your wrist while she says it, then lets go so you can put the questionnaire in your bag.</p>
<<actor-thought you>>I'll keep the answers as well as the totals. She said we'd bring it up later.<</actor-thought>>
<div class="continue-links"><<link "Head home" setup.schoolExitTarget()>><<run setup.applyIdentity("act1-day5-object"); setup.applyRecognition("act1-day5-object"); setup.finishSchoolDay()>><</link>></div>
<</identity-choice>>
<<you-choice "Okay. Two people. Easy.">>
<<actor bully>>There you go. Be done before I am.<</actor>>
<<actor-thought you>>
My sister will at least open the door. I'll start there.
<</actor-thought>>
<div class="continue-links"><<link "Head home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>></div>
<</you-choice>>
<<you-action "Stay quiet. Nod.">>
<<actor girlfriend>>Have you got a pen? You always borrow mine.<</actor>>
<<actor-thought you>>
Nodding is easier than being the problem one more time.
<</actor-thought>>
<div class="continue-links"><<link "Head home" setup.schoolExitTarget()>><<run setup.applyRecognition("act1-day5-nod"); setup.finishSchoolDay()>><</link>></div>
<</you-action>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day8-results-table.jpg'" alt="The group compiling the interview results">
<<if $flags.day8Submitted>>
<p class="scene-lead">The project has been submitted. You can check the group's copy on your phone.</p>
<div class="continue-links">[[Read the update|phone results live]] [[Home]]</div>
<<elseif !$flags.surveyPark or !$flags.surveySister>>
<<set $flags.questHint = "Finish the remaining interviews: Park before 22:00 and your step-sister before 18:00.">>
<<actor-thought you>>I still need <<if !$flags.surveyPark>>the park interview<</if>><<if !$flags.surveyPark && !$flags.surveySister>> and <</if>><<if !$flags.surveySister>>$sisterName's answers<</if>> before we can submit.<</actor-thought>>
<div class="continue-links">[[Collect the missing answers|Home][$schoolDay = 8; $gameDate = setup.changeDate($gameDate, 'hours', 2)]]</div>
<<else>>
<<set $flags.questHint = "">>
<p class="scene-lead">$exfriendName has the spreadsheet open at the back table. He asks for your paper forms before you have put your bag down.</p>
<<actor you>>$sisterName agreed with everything. The park group wasn't so sure about letting a school decide things for people.<</actor>>
<<if $flags.surveyParkConcern is true>>
<p>You point out the note beneath one answer. The woman asked you to distinguish an arrangement chosen at home from a rule imposed by a school.</p>
<<actor exfriend>>I'll keep that beside the interview totals. It doesn't fit the online table.<</actor>>
<<elseif $flags.surveyParkConcern is false>>
<<actor exfriend>>Did you write down what they said?<</actor>>
<<actor you>>Only the answers on the form.<</actor>>
<<actor exfriend>>Then I can count those. I can't quote a conversation from memory.<</actor>>
<<else>>
<p>You hand over the forms. He checks the totals against your interview notes.</p>
<</if>>
<<actor girlfriend>>My two wanted to know who gets to set the ranks. I put that in the comments.<</actor>>
<<actor bestfriend>>Mine asked whether it would affect their jobs. You should've led with that. They had plenty to say.<</actor>>
<<actor bully>>Seven from training. Most said yes. One guy told me to stop asking and give his ball back.<</actor>>
<p>$exfriendName turns his laptop so everyone can see the other sheet.</p>
<<actor exfriend>>Twenty thousand online responses. Eighteen thousand positive, fifteen hundred neutral, five hundred negative.<</actor>>
<<actor you>>How did a class survey get twenty thousand people?<</actor>>
<<actor exfriend>>Someone reposted it on the main ANWO forum. It's pinned there now.<</actor>>
<<actor you>>Then most of them were interested before they opened it. We can't treat them like people we stopped in the park.<</actor>>
<<actor exfriend>>I kept the totals separate. That's why there are two sheets.<</actor>>
<<actor teacher>>Please include both with the submission. The student council requested the projects with the largest samples.<</actor>>
<p>She moves to the next table. $girlfriendName reaches for the cover page, then stops when she sees you looking at it.</p>
<<actor girlfriend>>What do you want to put on there?<</actor>>
<span id="conv"></span>
<div id="options">
<<identity-choice resistance "We should flag the bias before we submit.">>
<<actor exfriend>>Write a separate note. The counts are accurate, and I'm leaving them in.<</actor>>
<<actor you>>I'm questioning who answered, not your addition.<</actor>>
<<actor bestfriend>>Can you finish it before $girlfriendName has to ask for an extension?<</actor>>
<p>You write that the online sample came from an ANWO forum and that neutral answers were grouped under no stated opposition.</p>
<<if $flags.surveyParkConcern is true>><p>You attach the park respondent's qualification too. $exfriendName adds the page to the PDF while you watch.</p><<else>><p>$exfriendName adds the page to the PDF while you watch.</p><</if>>
<<actor girlfriend>>All right. Your name goes on the note so she can ask you about it.<</actor>>
<div class="continue-links"><<link "Submit with the note attached" "School 8 Day anwo submit">><<run setup.submitSchoolSurvey(true); setup.applyIdentity("act1-day8-object"); setup.applyRecognition("act1-day8-object")>><</link>></div>
<</identity-choice>>
<<you-choice "Fine. Submit it. I want the grade.">>
<<actor girlfriend>>Okay. I'll upload it before she comes back.<</actor>>
<p>You leave the cover page as it is. $exfriendName watches the upload bar and closes the spreadsheet when the receipt appears.</p>
<div class="continue-links"><<link "Hand in the packet" "School 8 Day anwo submit">><<run setup.submitSchoolSurvey(false)>><</link>></div>
<</you-choice>>
<<identity-choice devotion "I trust your judgment. I'll follow your lead.">>
<<actor girlfriend>>I'd submit this version. We have what she asked for.<</actor>>
<p>She waits for you to nod before pressing Upload. You leave the decision with her.</p>
<div class="continue-links"><<link "Follow her lead" "School 8 Day anwo submit">><<run setup.submitSchoolSurvey(false); setup.applyIdentity("act1-day8-defer"); setup.applyRecognition("act1-day8-defer")>><</link>></div>
<</identity-choice>>
</div>
<</if>>
<</nobr>><<nobr>>
<<run setup.submitSchoolSurvey()>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/day8-results-table.jpg'" alt="The submitted project and its upload receipt">
<<if $flags.surveyCaveatSubmitted is true>>
<<actor exfriend>>Uploaded. The note is the last page. Keep this copy if you want to check what gets shared.<</actor>>
<p>You save the PDF before he packs his laptop away.</p>
<<elseif $flags.surveyCaveatSubmitted is false>>
<<actor exfriend>>Uploaded. The summary is first, then the tables. I'll send everyone the receipt.<</actor>>
<<else>>
<p>The project is on file. You can see the totals in the receipt, but this copy does not show which notes accompanied them.</p>
<</if>>
<<actor teacher>>Thank you. I will forward the project to the council with the other selected submissions. Keep your interview sheets; you may be asked to explain your method.<</actor>>
<<actor girlfriend>>Can you keep yours flat? You'll need to read them again.<</actor>>
<p>She waits while you move the loose pages into a folder, then shoulders her own bag.</p>
<<set $flags.questHint = "Phone: check the group's submitted project.">>
<div class="continue-links"><<link "Head home" setup.schoolExitTarget()>><<run setup.finishSchoolDay()>><</link>></div>
<</nobr>><<nobr>>
<<set _loopBeat = Math.abs($schoolDay || 0) % 3>>
<<set _slideState = setup.day40PrivateSlideState()>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/school-week-loop-classroom.jpg'" alt="The teacher continuing the weekly seminar">
<p class="scene-lead">Another school morning passes in notes and short exercises. <<if !$flags.finalRankingSeen && !$flags.noAlphaBoundary>>The project deadline is close.<<else>>You pack your bag when the last class finishes.<</if>></p>
<<if $flags.noAlphaBoundary && $flags.noAlphaRelationshipDone>>
<<actor girlfriend>>I'm stopping for coffee. Walk with me?<</actor>>
<<elseif $flags.finalRankingSeen>>
<<if _loopBeat eq 0>>
<<actor teacher>>The project cycle is closed. Your public ranking remains live, and later work may still change it.<</actor>>
<<elseif _loopBeat eq 1>>
<<if _slideState eq "removed">>
<p>The approved deck is still the one in the archive. $bestfriendName's private edits never made it into the presentation.</p>
<<actor girlfriend>>That deck stays as it is. I'm not reopening it for her.<</actor>>
<<elseif _slideState eq "exposed">>
<p>The key photo still comes up in a conversation behind you. <<if $flags.day37SlideDecision eq "document" && $flags.day40SlideChallenged>>Your objection and the edit history remain attached to the report.<</if>></p>
<<else>>
<<actor exfriend>>The report is filed. I'll send you the reference if you need a copy.<</actor>>
<</if>>
<<else>>
<<if $flags.projectArchiveAccess eq "approval">>
<p>Your approval is attached to the filed copy. $bestfriendName cannot change it from the shared folder.</p>
<<actor girlfriend>>Nobody edits that file without both of us seeing it.<</actor>>
<<elseif $flags.projectArchiveAccess eq "co-sign">>
<<actor exfriend>>Both our signatures are on the filed copy. Any changes have to come through us.<</actor>>
<<elseif $flags.projectArchiveAccess eq "teacher-copy">>
<p>The teacher returns your signed source copy with its filing number. Later edits to the group folder have left it intact.</p>
<<elseif setup.getFinalRankingResult() && setup.getFinalRankingResult().rank eq 1>>
<<actor bully>>You got a minute for the source list? Apparently you're the one to ask now.<</actor>>
<<else>>
<<actor exfriend>>Bring your source notes next time. We still have to settle the archive copy.<</actor>>
<</if>>
<</if>>
<<elseif $flags.day37SlideDecision>>
<<if $flags.day37SlideDecision eq "warn">>
<<actor girlfriend>>I have the final deck. $bestfriendName can complain after we get the grade.<</actor>>
<<elseif $flags.day37SlideDecision eq "document">>
<<actor exfriend>>Keep the edit-history photo. If the private slide returns, evidence matters more than who laughs first.<</actor>>
<<else>>
<<actor bestfriend>>You left my slide in the deck. Do not act surprised when the room finally sees it.<</actor>>
<</if>>
<<elseif $flags.day31DataAuditDone>>
<<if $flags.day31Contribution eq "corrected">>
<<actor exfriend>>Your name is on the correction. Be ready to explain it instead of making me do it for you.<</actor>>
<<elseif $flags.day31Contribution eq "shared">>
<<actor exfriend>>We share the correction, so we share the question. Bring the original notes.<</actor>>
<<else>>
<<actor girlfriend>>You fixed the totals quietly. Today you tell the group it was your work before the draft forgets you.<</actor>>
<</if>>
<<elseif _loopBeat eq 0>>
<<actor teacher>>Keep working on the project. Every claim in the final deck must trace back to a source.<</actor>>
<</if>>
<<run setup.nudgeArousal(random(4, 8))>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 6)>>
<</nobr>>
<div class="continue-links">
[[Leave school|After school][$schoolDay += 1]]
<<if setup.classRankingHasUpdate()>>
[[Check the ranking board|Class board][$schoolDay += 1]]
<</if>>
</div><<nobr>>
/* Date-prep renders inside this history moment, avoiding a routing-only passage. */
<<if setup.trySisterDatePrep()>>
<<include "Sister date lingerie">>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister">
<<if $caged>>
<p class="delayed">$sisterName looks you over like she's inventorying metal under cotton.</p>
<<elseif $world eq "anwo">>
<p class="delayed">$sisterName is half-dressed for the day and fully ready to judge you.</p>
<<else>>
<p class="delayed">Your step-sister leans in the doorway, bored and dangerous in a normal way.</p>
<</if>>
<<set _sisSurveyReady = !$flags.surveySister && $gameDate.getHours() lt 18 && ($flags.fieldSurveyOpen || $flags.surveyPark || hasVisited("School 5 Day anwo"))>>
<<if _sisSurveyReady>>
<div class="quest-banner">
<strong>Field survey</strong>
<p>$sisterName is free enough to take your ANWO questionnaire.</p>
[[Run survey with step-sister|Survey - Ask step-sister]]
</div>
<<elseif !$flags.surveySister && ($flags.fieldSurveyOpen || hasVisited("School 5 Day anwo")) && $gameDate.getHours() gte 18>>
<p class="hint-line">She's busy later in the day. Try again before 18:00.</p>
<<elseif !$flags.surveySister && $flags.day3SurveyDone && !$flags.fieldSurveyOpen && !hasVisited("School 5 Day anwo")>>
<p class="hint-line">Field interviews aren't assigned yet. Wait for the school assignment.</p>
<</if>>
<<if _sisSurveyReady>>[[Run survey with step-sister|Survey - Ask step-sister]]<</if>>
<<if $caged>>[[Help step-sister]]<</if>>
<<if $caged && $sisterTaskChapter gte 1>><<link `"Quick check-in with " + $sisterName` "Sister small talk">><</link>><</if>>
[[Home]]
<</if>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/act1/sister-survey.jpg'" alt="Step-sister taking the ANWO survey on her phone with an amused look">
<<if $flags.surveySister>>
<p class="scene-lead">$sisterName already filled in the questionnaire. Her answers are in your notes.</p>
<div class="continue-links">[[Home]]</div>
<<else>>
<p class="scene-lead">$sisterName is waiting for her washing to finish. She takes your phone while you explain the assignment.</p>
<<actor you>>
Hey $sisterName, do you have a moment for a quick survey about ANWO?
<</actor>>
<<actor sister>>
How long is this? I'm leaving when the machine stops.
<</actor>>
<<actor you>>
Six questions. We're asking whether people should get different authority based on their ranking.
<</actor>>
<<actor sister>>
Then someone would actually be in charge? That would save half the arguments in this house.
<</actor>>
<p class="delayed">After the survey...</p>
<<actor you>>
You agreed with all of it. Even the part about following someone else's instructions?
<</actor>>
<<actor sister>>
If someone knows what they're doing, yes. I'd rather finish a job than spend an hour arguing about whose turn it is.
<</actor>>
<<actor you>>
What if you're the one who gets ranked lower?
<</actor>>
<<actor sister>>Then I'd show up on time and do the work. You could try that while you're worrying about it.<</actor>>
<p>The machine beeps. She hands your phone back and waits for you to move out of the doorway.</p>
<<actor-thought you>>
She scored full marks. She also sounds sure the person giving orders would agree with her.
<</actor-thought>>
<div class="continue-links"><<link "Take your notes home" "Home">><<run setup.completeSchoolInterview("sister")>><</link>></div>
<</if>>
<</nobr>><<nobr>>
<<switch $sisterTaskChapter>>
<<case 0>>
<<include "Sister visit 1 panties">>
<<case 1>>
<<include "Sister visit 2 clean">>
<<case 2>>
<<include "Sister visit 3 key talk">>
<<default>>
<<include "Sister visit chores">>
<</switch>>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister visit">
<<actor sister>>
Oh, brother. Look at you, still trying to hide that cage under your clothes.
<</actor>>
<<actor sister>>
I handed $girlfriendName the solution. She actually used it. I am weirdly proud and very entertained.
<</actor>>
<<actor sister>>
Task time. Put on my dirty panties over the cage. Photo stays on my phone, not the group chat... unless you bore me.
<</actor>>
<<actor sister>>
Refuse and I tell her you have been rubbing the cage whenever nobody is looking.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "No. I am not doing that.">>
<<actor sister>>
Okay. Your girlfriend will hear from me.
<</actor>>
[[See ya|Home][$relationshipState = "girlfriend-mad"; $girlfriendMadReason = "$sisterName told me you have been rubbing your cage like a junkie."]]
<</you-choice>>
<<you-choice "Fine. Just... do not show anyone.">>
<img class="centered delayed" @src="setup.ImagePath+'you/chastity-panty.webp'">
<<actor sister>>
Gorgeous. Soft boy fashion. $girlfriendName would laugh and then keep you.
<</actor>>
<<actor-thought you>>
The warm fabric drags across the cage when you move. You hold still while she takes the photo.
<</actor-thought>>
[[Thanks...|Home][$sisterTaskChapter = 1; $flags.sisterVisit1 = true]]
<</you-choice>>
</div>
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister visit">
<<actor sister>>
Hey, loser. Still sore from the cage?
<</actor>>
<<actor sister>>
I need my room clean before my friend comes over. You will do it quietly, and if he arrives early, keep your eyes down and stay out of his way.
<</actor>>
<<actor sister>>
Pay is ten bucks and me not inventing new crimes for $girlfriendName.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "I will clean. Keep her out of it.">>
[[Clean her room|Sister clean room]]
<</you-choice>>
<<you-choice "I am not your maid.">>
<<actor sister>>
Then I send one text and let your girlfriend deal with you.
<</actor>>
[[Leave|Home][$relationshipState = "girlfriend-mad"; $girlfriendMadReason = "$sisterName says you are a lazy locked brat who will not even help family."]]
<</you-choice>>
</div>
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'sister/room-cleaning.webp'">
<p class="delayed">You wipe down the room while she scrolls on her bed. Whenever she spots dust, she points at it and keeps her eyes on the screen.</p>
<<actor sister>>
Nice work, maid. Here is ten. Do not spend it all on lube you will never use properly.
<</actor>>
<<if $backpack.has("apology-gift")>>
<<actor sister>>
Cute... you bought $girlfriendName something. Bribery is a love language. She will like that.
<</actor>>
<</if>>
[[Thanks|Home][$money += 10; $sisterTaskChapter = 2; $flags.sisterVisit2 = true; $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister key talk">
<<actor sister>>
Be serious for one minute. I can make fun of you again after.
<</actor>>
<<actor sister>>
$girlfriendName asked me if dual keyholding is a thing. I said only if she wants drama.
I do not want her key. The photos already give me enough leverage.
<</actor>>
<<actor sister>>
So here is the deal: I keep quiet about your little panty portfolio. You keep being useful, errands, cash, ego snacks.
If you ever get unlocked and act big, I remind everyone who dressed you.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "Deal. Just do not ruin us.">>
<<actor sister>>
"Us" is cute. You mean her. Fine, I will stay out of the way for now.
<</actor>>
[[Home][$sisterTaskChapter = 3; $flags.sisterVisit3 = true; $girlfriendTrustLevel = setup.changeFavor(1)]]
<</you-choice>>
<<you-choice "You are enjoying this too much.">>
<<actor sister>>
Obviously. You used to act so confident, and now you fold my laundry in a cage. Why would I look away?
<</actor>>
[[Home][$sisterTaskChapter = 3; $flags.sisterVisit3 = true]]
<</you-choice>>
<<you-choice "Tell $girlfriendName I want her to hold the only key. Not you.">>
<<actor sister>>
Aww, loyalty. I will text her you said that. She will melt... or tighten the schedule, so I win either way.
<</actor>>
[[Home][$sisterTaskChapter = 3; $flags.sisterVisit3 = true; $girlfriendTrustLevel = setup.changeFavor(2)]]
<</you-choice>>
</div>
<</nobr>><<nobr>>
<<silently>>
<<set _scProofDue = ($flags.sisterChoreCount || 0) gte 5 && !Object.prototype.hasOwnProperty.call($flags, "sisterChoreProofShared")>>
/* Four chores rotate on a single anti-repeat re-roll ($flags.sisterChoreLast). Becky assigns one;
* the player only chooses between actions with different time, money, or story consequences. */
<<set _sc = random(1, 4)>>
<<if ($flags.sisterChoreLast || 0) eq _sc>>
<<set _sc = (_sc % 4) + 1>>
<</if>>
<<set $flags.sisterChoreLast = _sc>>
<<set _scFamiliar = ($flags.sisterChoreCount || 0) gte 3>>
<</silently>>
<<if _scProofDue>>
<img class="hero-img centered" @src="setup.ImagePath+'sister/room-cleaning.webp'" alt="Becky watching from the doorway after the laundry is folded">
<p class="delayed">You finish the last stack on her bed. $sisterName puts the empty basket in your arms, steps back, and raises her phone. The cage line shows through your trousers when you hold the basket against your waist.</p>
<<actor sister>>
$girlfriendName keeps asking whether you are useful here. This answers it. I will send it if you say yes.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "Send it to $girlfriendName.">>
<<set $flags.sisterChoreProofShared = true>>
<<set $girlfriendTrustLevel = setup.changeFavor(1)>>
<<actor sister>>Sent. She sent back a heart and told me to keep you busy. Five is on the dresser.<</actor>>
<div class="delayed">[[Go home|Home][$money += 5; $flags.sisterChoreCount = (($flags.sisterChoreCount || 0) + 1); $gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</you-choice>>
<<you-choice "Keep the photo between us.">>
<<set $flags.sisterChoreProofShared = false>>
<<actor sister>>Fine. I asked before I sent it. Do not look so surprised. Five is on the dresser.<</actor>>
<div class="delayed">[[Go home|Home][$money += 5; $flags.sisterChoreCount = (($flags.sisterChoreCount || 0) + 1); $gameDate = setup.changeDate($gameDate, 'hours', 1)]]</div>
<</you-choice>>
</div>
<<else>>
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister chores">
<<if _scFamiliar>>
<<actor sister>>
Door was open, so I knew you wanted work. I picked the job already, loser.
<</actor>>
<<else>>
<<actor sister>>
I have a list and you have free time. I picked the job, loser.
<</actor>>
<</if>>
<<if _sc eq 1>>
<p class="delayed">Two full bags are still in the car, and one of them holds the bottles.</p>
<<actor sister>>
Shopping is in the car. Bring both bags, and keep the bread away from the bottles.
<</actor>>
[[Carry it up|Sister chore shopping]]
<<elseif _sc eq 2>>
<p class="delayed">Her laundry basket sits by the door with a net bag balanced on top.</p>
<<actor sister>>
Basket by the door. Lights, darks, net bag on cold. Open the net bag and you fold everything twice.
<</actor>>
[[Sort the basket|Sister chore laundry]]
<<elseif _sc eq 3>>
<p class="delayed">Three pieces of glass sit in the kitchen bin. One space in the front row of the cupboard is empty.</p>
<<actor sister>>
I broke a glass. This week you broke it. Practise before anyone asks.
<</actor>>
[[Take the blame|Sister chore glass]]
<<else>>
<p class="delayed">The kitchen bin is full and the bag has started to leak at the bottom.</p>
<<actor sister>>
Kitchen bin. Take it out, hose the terrace, then wipe the stairs. Start at the top, loser.
<</actor>>
[[Take the bin out|Sister chore bins]]
<</if>>
<p class="hint-line">Pays $5 · takes 1 hour.</p>
<<if _scFamiliar>>
<<actor sister>>
You know where everything goes. Stop waiting for the house tour.
<</actor>>
<</if>>
<<link `"Talk to " + $sisterName` "Sister small talk">><</link>>
[[Leave|Home]]
<</if>>
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'sister/room-cleaning.webp'">
<<actor sister>>
Adequate. Here is five for not crying about it.
<</actor>>
[[Home][$money += 5; $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'story/hustles/carry-bags.jpg'" alt="carrying the shopping up">
<p class="delayed">You take both bags up in one trip and set them on the kitchen counter. She checks the receipt before she looks at you.</p>
<<actor-thought you>>
The handles cut into your fingers on the second landing. She watched from the top step and did not come down.
<</actor-thought>>
<<actor sister>>
Bread survived. Five on the counter. Put it on top before the second landing next time.
<</actor>>
[[Home][$money += 5; $flags.sisterChoreCount = (($flags.sisterChoreCount || 0) + 1); $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'sister/room-cleaning.webp'" alt="sorting her laundry">
<p class="delayed">You sort the basket on the bathroom floor. She leans in the doorway and watches you match the socks.</p>
<<actor-thought you>>
Her shirts smell like the hall after a night out. You fold those slower than the rest.
<</actor-thought>>
<<actor sister>>
Whites stayed white. Five on the counter. The net bag still has a zip, so you listened.
<</actor>>
[[Home][$money += 5; $flags.sisterChoreCount = (($flags.sisterChoreCount || 0) + 1); $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister and the broken glass">
<p class="delayed">You carry the pieces out to the bin and wipe the kitchen floor. She stands in the doorway with her arms folded and listens.</p>
<<actor sister>>
One more time. Lose the shrug. Keep your hands out of your pockets.
<</actor>>
<p class="delayed">You say the line a third time. Somewhere in the second one it stopped sounding like a lie.</p>
<<actor-thought you>>
Nobody else was in the house for any of it. She still made you rehearse.
<</actor-thought>>
<<actor sister>>
Five for taking the blame. Buy the next glass before anyone notices.
<</actor>>
[[Home][$money += 5; $flags.sisterChoreCount = (($flags.sisterChoreCount || 0) + 1); $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<img class="centered" @src="setup.ImagePath+'story/late/sister-visit.jpg'" alt="step-sister and the full kitchen bin">
<p class="delayed">You carry the bag out by the neck and drop it in the wheelie bin. The terrace takes ten minutes with the hose, and the stairs take the rag she left on the step.</p>
<<actor sister>>
The neighbours watched you drag the bin out. Wave next time. You looked like the hired help anyway.
<</actor>>
<<actor-thought you>>
Nobody in the house asked where the bag came from. You still know which bin day is which now.
<</actor-thought>>
<<actor sister>>
Five. You put the hose back, so I do not have to find my shoes.
<</actor>>
[[Home][$money += 5; $flags.sisterChoreCount = (($flags.sisterChoreCount || 0) + 1); $gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
<img class="hero-img centered" @src="setup.ImagePath+'story/late/becky-small-talk.webp'" alt="Becky leaning back on the sofa with a flat look">
<<actor sister>>
You are quieter since the cage. Suits you.
Do not ask me for the key. I never took it. I just like knowing you wonder.
<</actor>>
<<if $caged>>
<<actor sister>>
$girlfriendName is lucky to have someone this obedient. You probably think you are the lucky one.
<</actor>>
<</if>>
<<if ($flags.sisterChoreCount || 0) gte 3>>
<<actor sister>>
Three jobs this week, and you never asked what was next. I noticed. You still load the dishwasher wrong, so do not get proud.
<</actor>>
<</if>>
[[Home][$gameDate = setup.changeDate($gameDate, 'hours', 1)]]
<</nobr>><<nobr>>
/* Random interrupt while jerking, mean practical, not soft. Cooldown set in trySisterJerkInterrupt. */
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/late/sister-walk-in.jpg'" alt="sister walk-in">
<p class="delayed">You left the door unlocked. $sisterName stops halfway into the room, looks from your hand to your face, and slowly starts to grin.</p>
<<actor sister>>
Oh my god.
Really, in the middle of the day? That is gross and hilarious.
<</actor>>
<<if $caged>>
<<actor sister>>
Wait, the cage is still on and you are still trying?
That is so pathetic. Keep going... actually, stop. I have a better idea.
<</actor>>
<<else>>
<<actor sister>>
Hands off. Now. I am not watching you finish like a podcast.
You got caught. That means you owe me.
<</actor>>
<</if>>
<<actor-thought you>>
Your hand stays frozen over your lap. $sisterName folds her arms and waits for you to answer.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<if $caged>>
<<you-choice "Put her dirty panties over the cage while she films a three-second laugh.">>
<img class="centered delayed" @src="setup.ImagePath+'you/chastity-panty.webp'" alt="">
<<actor sister>>
Fashion. Soft boy couture.
If $girlfriendName asks, I will say you volunteered. Because you did. Just now.
<</actor>>
<<run setup.nudgeArousal(10)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">She leaves snickering. You pull off the warm fabric and shove it under the covers.</p>
<div class="delayed">[[Hide under the covers|Home]]</div>
<</you-choice>>
<<you-choice "Rub the cage while she mocks you until she says stop.">>
<<actor sister>>
Faster... no, slower. Look at me when you rattle.
That is enough. Stop and put your hands up while you suffer.
<</actor>>
<<run setup.peakArousal()>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">Your hands remain raised while the ache builds. She snaps one last photo and calls the exercise good for you.</p>
<div class="delayed">[[Ache in silence|Home]]</div>
<</you-choice>>
<<you-choice "Beg her not to tell $girlfriendName, do her laundry as payment.">>
<<actor sister>>
Deal. Basket is by the door.
And if you "forget," I invent a worse version for her.
<</actor>>
<<run setup.nudgeArousal(8)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">You fold her clothes while the cage digs into your lap. She unfolds one shirt just to make you redo the corners.</p>
<div class="delayed">[[Done. Still hard.|Home]]</div>
<</you-choice>>
<<else>>
<<you-choice "Finish while she watches and rates you like a bad sport.">>
<<actor sister>>
Wow, that was sad... maybe two out of ten for effort.
Wipe up, then stay out of the hallway until I forget I saw that.
<</actor>>
<<set $aroused = 0>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">You finish while she watches with folded arms. When you look away, she gives your performance another two out of ten.</p>
<div class="delayed">[[Crawl into a hole (Home)|Home]]</div>
<</you-choice>>
<<you-choice "Stop mid-stroke. She makes you apologize on your knees.">>
<<actor sister>>
"Sorry for being a gross little pervert in a shared house."
Say it louder. Good boy... wait, no, gross boy. That is close enough.
<</actor>>
<<run setup.nudgeArousal(12)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">You stay on your knees after the apology. She walks out and deliberately leaves the door open.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Text $girlfriendName what $sisterName dictates.">>
<<actor sister>>
Type: "got caught by $sisterName. i am pathetic."
Send it, then show me. Perfect, she is going to love that.
<</actor>>
<<set $girlfriendTrustLevel = Math.max(0, ($girlfriendTrustLevel || 0) - 1)>>
<<run setup.nudgeArousal(8)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">The read receipt appears almost at once. Your stomach drops while $sisterName checks the wording over your shoulder and nods with satisfaction.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<</if>>
</div>
</div>
<</nobr>><<nobr>>
/* Random 1-in-X when visiting step-sister: date-night outfit, alpha pickup soon. Cooldown in trySisterDatePrep. */
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'sister/date-ready.jpg'" alt="step-sister dressed for a date">
<p class="delayed">You knock but enter before she answers. $sisterName is fastening an earring at the full-length mirror, dressed in a tight black dress and heels. Her perfume fills the room, and her bag is already waiting on the bed.</p>
<<actor sister>>
Knocking is a concept, loser.
Relax, I'm dressed. The naked part comes after the restaurant, if he earns it.
<</actor>>
<<actor-thought you>>
The dress clings to her hips. She catches you looking in the mirror and takes her time adjusting it.
<</actor-thought>>
<<actor sister>>
The guy is tall, pays for dinner, and orders without making it a group discussion.
He's picking me up in like twenty. So either help or gawk from the door like a haunted house prop.
<</actor>>
<<if $caged>>
<<actor sister>>
Oh right, you're locked downstairs. Cute.
If he texts that he is close, I might leave you in the hall so he never has to meet you.
<</actor>>
<<elseif $world eq "anwo">>
<<actor sister>>
ANWO would put him well above you. While I wait for someone who can use his hands, you can make yourself useful.
<</actor>>
<</if>>
<span id="conv"></span>
<div id="options">
<<you-choice "Ask who he is. Try not to sound jealous.">>
<<actor you>>
So uh... who is he?
<</actor>>
<<actor sister>>
Someone who does not need a survey to know he's above you.
He's taking me somewhere loud and good. If I'm late back, assume I'm busy. Don't text me "you okay?" like a mom.
<</actor>>
<<run setup.nudgeArousal(8)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">She checks her phone, smiles at a name you do not get to see, and shoos you out with two fingers.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Offer to zip her / grab her bag. Soft servant mode.">>
<<actor you>>
I can... zip you, or get your bag. Whatever you need.
<</actor>>
<<actor sister>>
Wow. Useful for once.
Bag's on the bed, and don't sniff anything. Actually, wait... look at me in the mirror. Yeah, that's the face of a guy who knows he's not coming.
<</actor>>
<<run setup.nudgeArousal(10)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">You bring her the clutch. She takes it with a pitying smirk, then closes the door in your face so she can finish getting ready.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Stare too long. She catches you and rates the dress.">>
<<actor sister>>
Eyes up. Or don't. I paid for this silhouette.
Rate me out loud, one to ten. If you say ten, I'm calling you a liar and a simp.
<</actor>>
<<actor you>>
...Nine, okay, fine, ten. I know what that makes me.
<</actor>>
<<actor sister>>
Correct. He's getting the ten. You're getting the hallway.
Under this? Black lace, and none of your business. Have fun imagining it while I'm out.
<</actor>>
<<run setup.nudgeArousal(12)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">She turns once in front of the mirror. Your eyes follow the dress, and she catches you staring before sending you into the hallway.</p>
<div class="delayed">[[Leave before he arrives|Home]]</div>
<</you-choice>>
<<if $caged>>
<<you-choice "Beg her not to tell $girlfriendName you walked in staring.">>
<<actor sister>>
Oh I might.
Or I might say my locked little step-bro almost creamed the carpet because I put on heels.
Behave and I keep it cute. Act weird and I send her a voice note.
<</actor>>
<<run setup.nudgeArousal(10)>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">You back out of the room, sore with every step. A car horn sounds downstairs, and she smiles as she reaches for her bag.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<</if>>
<<you-choice "Mumble sorry and leave before he shows.">>
<<actor sister>>
Smart. First good choice all day.
Don't wait up. Don't "check the driveway." Go be soft somewhere else.
<</actor>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<<run setup.nudgeArousal(6)>>
<p class="delayed">You leave with her perfume clinging to your shirt. Behind you, she closes the door and turns the lock.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</nobr>><<nobr>>
/* Legacy hub removed */
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<</nobr>><<nobr>>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<</nobr>><<nobr>>
<<if setup.hustleStatus("beg") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/beg-allowance.jpg'" alt="beg for allowance">
<<actor girlfriend>>
You need cash again? Fine, ask me properly, and don't try "Hey, can I borrow some?"
You know what I want to hear.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "Please, keyholder... I need allowance for your errands.">>
<<actor girlfriend>>
That's better. Don't spend it on yourself before you finish my errands.
<</actor>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<set _pay = setup.completeHustle("beg")>>
<p class="delayed">A transfer of <strong>$<<= _pay>></strong> reaches your account.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Can you just send money? I'm short.">>
<<actor girlfriend>>
That was lazy. You get half, and next time you can ask with some manners.
<</actor>>
<<set $money += 12>>
<<set $flags.hustleUnlocked = true>>
<<set $flags.hustleLastDayNum = $day>>
<<if !$hustleLastDone>><<set $hustleLastDone = {}>><</if>>
<<set $hustleLastDone["beg"] = $day>>
<<set $gameDate = setup.changeDate($gameDate, 'hours', 1)>>
<p class="delayed">She sends only <strong>$12</strong>. The smaller transfer stings more than it should.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("school-bags") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/carry-bags.jpg'" alt="carry bags">
<p class="delayed">Before first period, $girlfriendName drops her bag on your shoulder and walks on. $bestfriendName laughs and drops hers on top, forcing you to catch both straps.</p>
<<actor girlfriend>>
Walk normal.
If anyone asks, you're being useful.
<</actor>>
<<actor bestfriend>>
Aww, she brought me a locked pack mule.
Don't drop my stuff, loser.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-action "Carry both bags · $20 · no extra time">>
<<actor bestfriend>>
Classroom. Try not to drag mine.
<</actor>>
<<actor girlfriend>>
I'm still paying you. Keep walking.
<</actor>>
<<set _pay = setup.completeHustle("school-bags")>>
<p class="delayed">She pays you <strong>$<<= _pay>></strong> when you reach the classroom. Your shoulders ache, and $bestfriendName adds another laugh before taking her bag.</p>
<<include "Hustle school exit">>
<</you-action>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("bags") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/carry-bags.jpg'" alt="carry bags">
<p class="delayed">In the mall corridor, $girlfriendName keeps adding shopping bags until the handles dig into both forearms.</p>
<<actor girlfriend>>
Don't drop anything.
If someone stares, smile. You're my boyfriend, so you carry my bags.
<</actor>>
<<actor-thought you>>
The cage presses beneath your jeans while lace tags peek from a bag meant for someone else to enjoy.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-action "Carry the shopping bags · $15 · 2h">>
<<actor girlfriend>>
Hold them tighter. I'm paying you, so keep walking.
<</actor>>
<<set _pay = setup.completeHustle("bags")>>
<p class="delayed">She puts <strong>$<<= _pay>></strong> in your pocket after you carry everything through the food court. Several people watched you struggle.</p>
<div class="delayed">[[Home]]</div>
<</you-action>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("bully-coffee") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/bully-coffee.jpg'" alt="coffee for the bully">
<<actor girlfriend>>
He wants coffee, and you're closer. Go get it.
Don't make that face. He's paying, and you need the cash.
<</actor>>
<p class="delayed">You find $bullyName lounging outside in the shade. He barely looks up from his phone when you approach.</p>
<<actor bully>>
Damn, she really sent the locked one. Get me a large black coffee and don't spill it.
<</actor>>
<span id="conv"></span>
<div id="options">
<<you-choice "...Okay. One black large.">>
<p class="delayed">You buy the coffee and hand it over. His fingers close around the cup without touching yours.</p>
<<actor bully>>
Damn, you actually did it. Here's something for the walk.
<</actor>>
<<set _pay = setup.completeHustle("bully-coffee")>>
<<run setup.nudgeArousal(8)>>
<p class="delayed">He drops <strong>$<<= _pay>></strong> into your open palm and turns back to his phone.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Why am I doing this?">>
<<actor bully>>
Because she said so. And you like money more than pride. Move.
<</actor>>
<<set _pay = setup.completeHustle("bully-coffee")>>
<p class="delayed">He laughs as you leave, but still tips you <strong>$<<= _pay>></strong>.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("alessia-shoe") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/alessia-shoe.jpg'" alt="shoe task">
<p class="delayed">After school, $bestfriendName sits on the sun-warmed steps and slips off one shoe. She points out the dirt along its white edge, then nudges it toward you with a grin.</p>
<<actor bestfriend>>
Oops.
You're free, right? Wipe it properly and I'll Venmo you a little allowance.
<</actor>>
<<if $girlfriendTrustLevel gte 5>>
<<actor girlfriend>>
Do it. She's being mean, but you need the money.
<</actor>>
<<else>>
<<actor girlfriend>>
Don't make a scene. Just clean it.
<</actor>>
<</if>>
<span id="conv"></span>
<div id="options">
<<you-choice "Kneel enough to wipe. Get it done.">>
<<actor bestfriend>>
There you go. Down on the step for thirty bucks.
<</actor>>
<<set _pay = setup.completeHustle("alessia-shoe")>>
<p class="delayed">The payment of <strong>$<<= _pay>></strong> arrives while you are still brushing grit from your knees.</p>
<<include "Hustle school exit">>
<</you-choice>>
<<you-choice "Wipe standing. Minimal.">>
<<actor bestfriend>>
Half-assed job, half pay. You still cleaned it, loser.
<</actor>>
<<set _pay = setup.completeHustle("alessia-shoe", { pay: 15 })>>
<p class="delayed">She sends only <strong>$<<= _pay>></strong>, then lifts the shoe to inspect your work in front of you.</p>
<<include "Hustle school exit">>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("used-panty") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/used-panty-assign.jpg'" alt="last night panties">
<img class="hero-img centered delayed" @src="setup.ImagePath+'you/chastity-panty.webp'" alt="lace against the cage">
<<actor girlfriend>>
I have something for you to wear to school.
These panties were on the floor last night while he was in me.
Put them on under your clothes and send me a photo of the waistband against the cage before you leave.
I'll pay when I see proof.
<</actor>>
<<actor-thought you>>
The unwashed fabric is still warm from her room. When you pull it on, the lace presses her scent and his against the cage.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-action "Put them on and send proof · $45 · no extra time">>
<<set $flags.wearingUsedPanty = true>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'story/hustles/used-panty-worn.jpg'" alt="under clothes all day">
<<actor girlfriend>>
Photo received. Walk normally. I'll know if you spend all day squirming.
<</actor>>
<<run setup.peakArousal()>>
<<set _pay = setup.completeHustle("used-panty")>>
<p class="delayed">You receive <strong>$<<= _pay>></strong>. The damp lace stays beneath your jeans until bedtime.</p>
<<include "Hustle school exit">>
<</you-action>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("condom-drink") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/condom-drink.jpg'" alt="cleanup stipend">
<p class="delayed">That evening, $bullyName sits half-dressed on the edge of the bed while $girlfriendName loops your key around one finger. A filled condom and a stack of cash wait on the nightstand.</p>
<<actor girlfriend>>
You wanted money, so I'm paying you to clean up after him.
<</actor>>
<<actor bully>>
Open up, experiment. Don't waste any.
<</actor>>
<<actor-thought you>>
The condom tastes of rubber, salt, and what he left behind. Your cage stays shut while your mouth cleans up after the cock she chose.
<</actor-thought>>
/* Explicit cleanup beat (inbox drop → story/hustles/condom-clean.webp) */
<img class="hero-img centered porn-frame delayed" @src="setup.ImagePath+'story/hustles/condom-clean.webp'" alt="condom cleanup">
<span id="conv"></span>
<div id="options">
<<you-choice "Do it. Eyes down. Finish it.">>
<img class="hero-img centered porn-frame delayed" @src="setup.ImagePath+'story/hustles/condom-clean.webp'" alt="cleanup done">
<<actor girlfriend>>
There. You stayed still and earned your money.
<</actor>>
<<run setup.peakArousal()>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<set _pay = setup.completeHustle("condom-drink")>>
<p class="delayed">She points to <strong>$<<= _pay>></strong> on the nightstand while your throat still burns.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Gag. Still finish.">>
<img class="hero-img centered porn-frame delayed" @src="setup.ImagePath+'story/hustles/condom-clean.webp'" alt="messy cleanup">
<<actor bully>>
Messy, but it still counts.
<</actor>>
<<actor girlfriend>>
You made a mess of your face, but you finished. I'll still pay you.
<</actor>>
<<run setup.peakArousal()>>
<<set _pay = setup.completeHustle("condom-drink")>>
<p class="delayed">She gives you <strong>$<<= _pay>></strong> and watches you wipe the tears from your face.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
<</nobr>><<nobr>>
<<if setup.hustleStatus("key-bully") neq "open">>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'story/hustles/key-to-bully.jpg'" alt="key lent to bully">
<p class="delayed">$girlfriendName unhooks the key from her chain. She doesn't unlock you. She holds it out to $bullyName.</p>
<<actor girlfriend>>
You can borrow it for a while.
Keep it long enough for him to understand that he doesn't get a say.
<</actor>>
<<set $flags.keyWithBully = true>>
<<actor bully>>
Damn, she's really lending me the remote.
I'm putting it in my pocket. Don't start begging.
<</actor>>
<<actor-thought you>>
The key clicks against the ring in his hand before disappearing into his pocket. Your cock remains locked, and now even $girlfriendName cannot open it until he gives the key back.
<</actor-thought>>
<span id="conv"></span>
<div id="options">
<<you-choice "Stay quiet while he teases the key in front of you.">>
<<actor bully>>
Look at your face. The key's warm from my pocket, and you're still not getting it. Walk.
<</actor>>
<<actor girlfriend>>
He'll tip you for the show, and then the key comes back to me.
<</actor>>
<<set $flags.keyWithBully = false>>
<<run setup.peakArousal()>>
<<set $girlfriendTrustLevel = Math.min(10, $girlfriendTrustLevel + 1)>>
<<set _pay = setup.completeHustle("key-bully")>>
<p class="delayed">He returns the key to her chain and pays you <strong>$<<= _pay>></strong>. You watch it settle against her chest and realize your hand is still clenched.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Ask for it back. Soft.">>
<<actor bully>>
Ask harder. Nah, you're still not getting it.
<</actor>>
<<actor girlfriend>>
That was the point. Next time, stay quiet until he gives it back.
<</actor>>
<<set $flags.keyWithBully = false>>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)>>
<<run setup.peakArousal()>>
<<set _pay = setup.completeHustle("key-bully")>>
<p class="delayed">He flicks the key back to her and still tips you <strong>$<<= _pay>></strong>. She catches it and keeps her eyes on you.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
<<you-choice "Let him pocket-check the cage while he holds the key.">>
<<actor bully>>
Damn, the cage is real. Stay locked, experiment.
<</actor>>
<<actor girlfriend>>
That was hot. You're disgusting, but at least you can earn from it.
<</actor>>
<<set $flags.keyWithBully = false>>
<<run setup.peakArousal()>>
<<set _pay = setup.completeHustle("key-bully")>>
<p class="delayed">He checks the cage through your clothes, close enough that anyone passing could notice. Then he returns the key and pays you <strong>$<<= _pay>></strong>.</p>
<div class="delayed">[[Home]]</div>
<</you-choice>>
</div>
</div>
<</if>>
/* his-tip (Jamal store errands) cut for now, passage kept as soft stub */
<</nobr>><<nobr>>
<div class="scene-panel compact"><p class="scene-lead">Nothing to do here right now.</p><div class="continue-links">[[Home]]</div></div>
<</nobr>><<nobr>>
/* Whole passage in nobr — SC turns every source newline into <br> (was ~50 empty breaks). */
<<if not settings.muteAudio>><<audio "reception_bell" play>><</if>>
<<silently>>
/* Story cap = what is allowed; climb = slow ramp from shifts; tier = min(cap, climb) */
<<set _cap = setup.workStoryCap()>>
<<set _climb = setup.workShiftClimb()>>
<<set _tier = setup.workKinkTier()>>
<<set _pay = setup.workShiftPay()>>
<<set _shiftsBefore = $workShiftsDone || 0>>
<<set _postKeyWork = $flags.alessiaKeyChapterDone && $flags.postKeySisterCheckinDone && !$flags.postKeyWorkCheckinDone>>
/* v0.6.0: one-shot Jenny event shifts (keyholder content, brief established first) */
<<set _eventPlug = !$flags.workEventPlugDone && $caged && $flags.keyRulesDone && $flags.workPinkBriefOn && _tier gte 2 && setup.scoreGate(4)>>
<<set _eventPhoto = !$flags.workEventPhotoDone && $flags.workPinkBriefOn && _tier gte 2 && !_eventPlug>>
<<set _eventMode = _eventPlug || _eventPhoto>>
/* v0.6.0: boss mini-arc stage for this shift (0 = none today) */
<<set _bossArcStage = 0>>
<<if _tier gte 2 && ($flags.workBossArc || 0) lt 1>>
<<set _bossArcStage = 1>>
<<elseif _tier gte 2 && $flags.workPinkBriefOn && ($flags.workBossArc || 0) eq 1>>
<<set _bossArcStage = 2>>
<<elseif _tier gte 3 && ($flags.workBossArc || 0) eq 2>>
<<set _bossArcStage = 3>>
<</if>>
/* v0.6.0: six vignettes per tier, one anti-repeat re-roll against the last shift */
<<set _shift = random(1, 6)>>
<<if ($flags.workLastVignette || 0) eq (_tier * 10 + _shift)>>
<<set _shift = (_shift % 6) + 1>>
<</if>>
<<if !_eventMode>>
<<set $flags.workLastVignette = _tier * 10 + _shift>>
<</if>>
/* Still per kink tier (always show a hero; reception gif as secondary for lobby motion) */
<<if _tier gte 3>>
<<set _deskStill = "work/desk-owned.jpg">>
<<elseif _tier gte 2>>
<<set _deskStill = "work/desk-keyholder.jpg">>
<<elseif _tier gte 1>>
<<set _deskStill = "work/desk-fresh-cage.webp">>
<<else>>
<<set _deskStill = "work/desk-soft.jpg">>
<</if>>
<</silently>>
<div class="scene-panel compact work-shift-panel">
<img class="hero-img centered" @src="setup.ImagePath + _deskStill" alt="hotel desk">
<img class="hero-img centered delayed" @src="setup.ImagePath + either('work/reception1.jpeg', 'work/reception2.webp')" alt="hotel receptionist at the lobby desk">
/* Boss: simple, once. No jargon cards. */
<<if !$flags.workBossBriefed>>
<<set $flags.workBossBriefed = true>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">Boss</span></span><span class="content">You'll cover the desk on weekends. Show up on time, smile at the guests, and don't give anyone a reason to complain. I pay cash after each shift. Whatever is happening under your belt or on your phone is your business, as long as it stays out of mine.</span></div></div>
<<else>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">Boss</span></span><span class="content"><<if _tier gte 3>>You've been acting strange lately, but you're still reliable. That's all I need.<<elseif _tier gte 2>>You know the routine. Watch the desk, help the guests, and don't make me come looking for you.<<elseif _tier gte 1>>You look tense. Take a breath, stand up straight, and get to work.<<else>>Clock in and don't overthink it.<</if>></span></div></div>
<</if>>
<<if _postKeyWork>>
<p class="scene-lead delayed">The first shift after the key week looks exactly like the old job: reservations, key cards, and a lobby that does not care what happened in the passenger seat.</p>
<<actor girlfriend>>
(text) <<if $flags.alessiaKeyConsent eq "declined">>my key never left. the drive is done.<<elseif $flags.alessiaKeyDriveResponse eq "return-early">>you used the return rule. the key is back with me.<<else>>the hour is over. the key is back on my chain.<</if>>
finish your shift. bring coffee home. 🔐
<</actor>>
<<actor-thought you>>
A guest slides a room key across the desk. You hand it back without staring. For six hours, a key can be only part of the job.
<</actor-thought>>
<</if>>
<<if _eventPlug>>
/* --- v0.6.0 event shift: her package (one-shot, Devotion-gated) --- */
<img class="hero-img centered delayed" @src="setup.ImagePath+'work/plug-shift.webp'" alt="A small steel plug and Jenny's note on a bathroom counter">
<p class="scene-lead delayed">This morning's package is already part of you. The steel sits deep and patient under your slacks, exactly where her note said it would spend the shift.</p>
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) the little box on your desk this morning
under. all shift. no touching, no adjusting, no excuses.
photo of your locker at lunch or it counts as losing it. 🔐
<</actor>>
<<else>>
<<actor-thought you>>
Her note from this morning is folded in your pocket: under, all shift, no touching, no adjusting, no excuses. She underlined "all" twice.
<</actor-thought>>
<</if>>
<p class="delayed">The first check-in nearly does it. You bend for the printer, the steel presses in, and your voice arrives one octave too polite. The guest thanks you. The desk hides everything except your knuckles.</p>
<p class="delayed">By mid-shift you have learned to stand, sit, and hand over key cards in a careful new grammar. The lobby hums like always. You are the only thing in it being quietly fucked by furniture decisions.</p>
<<run setup.peakArousal()>>
<span id="conv"></span>
<div id="options">
<<you-choice "Keep it in until closing, like her note says.">>
<<run setup.peakArousal()>>
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) all shift. good boy.
now stand there and think about who packed your workday for you. 😈
<</actor>>
<</if>>
<p class="delayed">You send the locker photo at lunch and hold position through closing. The walk home is careful. You know why.</p>
<<set $flags.workEventPlugDone = true, $flags.workEventPlugStance = "kept">>
<div class="delayed">[[Go home|Work Event Home]]</div>
<</you-choice>>
<<you-choice "Take it out at lunch. Your body is asking loudly.">>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 1)>>
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) lunch photo never came.
fine. we'll retry that rule until it sticks. 🔐
<</actor>>
<</if>>
<p class="delayed">In the stall you take it out. The afternoon is easier. You know she will collect later.</p>
<<set $flags.workEventPlugDone = true, $flags.workEventPlugStance = "removed">>
<div class="delayed">[[Go home|Work Event Home]]</div>
<</you-choice>>
</div>
<<elseif _eventPhoto>>
/* --- v0.6.0 event shift: photo proof from the stall (one-shot) --- */
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) staff bathroom. now.
brief down to your knees. cage in frame. mirror optional.
send it before your break ends. 🔐
<</actor>>
<<else>>
<<actor-thought you>>
Her text from break hangs over the shift like weather: staff bathroom, brief down, cage in frame, send it before the break ends.
<</actor-thought>>
<</if>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'work/pink-brief.jpg'" alt="The pink brief and caged lock in a bathroom mirror">
<p class="delayed">The staff bathroom smells like industrial soap and consequences. In the mirror, the pink brief and the lock make a small, damning still life that only exists because she asked for it.</p>
<span id="conv"></span>
<div id="options">
<<you-choice "Take the photo and send it.">>
<<run setup.peakArousal()>>
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) good boy.
keep that exact frame in your head for the rest of the shift. 😈
<</actor>>
<</if>>
<p class="delayed">The send button is the loudest click of your shift. You fix your slacks and practice a check-in smile in the mirror.</p>
<<set $flags.workEventPhotoDone = true, $flags.workEventPhotoStance = "sent">>
<div class="delayed">[[Go home|Work Event Home]]</div>
<</you-choice>>
<<you-choice "Tell her the bathrooms are too busy.">>
<<set $girlfriendTrustLevel = Math.max(0, $girlfriendTrustLevel - 2)>>
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) busy. sure.
we'll do it at home tonight instead. you're not off the hook, you're on a delay. 🔐
<</actor>>
<</if>>
<p class="delayed">You type the excuse with your face burning and pocket the phone before she replies. The stall still feels like a lie.</p>
<<set $flags.workEventPhotoDone = true, $flags.workEventPhotoStance = "dodged">>
<div class="delayed">[[Go home|Work Event Home]]</div>
<</you-choice>>
</div>
<<elseif _tier gte 3>>
/* --- Owned heat: chastity + cuck flash + sissy desk humiliation --- */
<<if _shift eq 1>>
<<actor-thought you>>
The honeymoon couple checks in with their hands all over each other. Their fingers keep finding each other over the desk while you swipe cards, and the cage keeps its own count of how many times you catch them.
<</actor-thought>>
<p class="delayed">They thank you, and you tell them to enjoy their stay. When you shift behind the desk, the cage pinches and reminds you what awaits at home.</p>
<<run setup.nudgeArousal(10)>>
<<elseif _shift eq 2>>
<<actor-thought you>>
You check your phone below the desk. $girlfriendName has sent a photo of the key pinched between her fingers.
The caption reads: work hard, locked pet. no breaks for that clitty.
<</actor-thought>>
<<actor girlfriend>>
(text) stand straight. smile. remember who owns the key while you earn mall money for my lingerie. 🔐
<</actor>>
<p class="delayed">You slide the phone away before the next guest reaches the desk. You enter their room number and keep the phone in your pocket. The manager praises your focus while her message sits unread.</p>
<<run setup.peakArousal()>>
<<elseif _shift eq 3>>
<<actor-thought you>>
A tall guest leans on the counter and laughs easily while you check his reservation. He looks nothing like $bullyName, but your body still recalls the chair in the corner.
<</actor-thought>>
<p class="delayed">You hand him a key card and watch him walk toward the elevators. Your own key remains on $girlfriendName's necklace, far beyond your reach.</p>
<<run setup.nudgeArousal(12)>>
<<elseif _shift eq 4>>
<<actor-thought you>>
In a bathroom stall, you quietly check the lock and nearly moan when it shifts. $girlfriendName told you not to touch the bars at work, but your fingers linger for half a second.
The brief contact leaves you more ashamed than relieved.
<<if $flags.workPinkBriefOn>>In the mirror above the sink, the pink waistband sits exactly where she left it, a second sentence in the same handwriting.<</if>>
<</actor-thought>>
<p class="delayed">You wash your hands and return to the desk before anyone notices. For the rest of the shift you smile at guests and keep your hands off yourself.</p>
<<run setup.peakArousal()>>
<<elseif _shift eq 5>>
<<actor-thought you>>
A regular guest leans in close to ask about late checkout, close enough that <<if $flags.workPinkBriefOn>>the pink brief suddenly feels like a secret with a temperature<<else>>the cage feels one layer too thin<</if>>. You answer at professional volume while your body files a separate report.
<</actor-thought>>
<p class="delayed">She thanks you by name and wheels her suitcase toward the elevator. You keep smelling her perfume at the desk. The ache stays with you until close.</p>
<<run setup.peakArousal()>>
<<else>>
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) $bullyName asked if you're still locked at that little hotel job
i said obviously
keep smiling for the guests. you're still useless for fucking. 😈
<</actor>>
<<else>>
<<actor-thought you>>
The lobby noise starts to sound like his voice. You are still locked and working while she decides who gets her attention.
<</actor-thought>>
<</if>>
<p class="delayed">By closing time, the cage has rubbed a sore line beneath your uniform. At least the cash waiting at the end of the shift is real.</p>
<<run setup.nudgeArousal(10)>>
<</if>>
<<elseif _tier eq 2>>
/* --- Key rules: femdom texts, chastity discipline, soft cuck --- */
<<if !$flags.workPinkBriefOrdered && !setup.scoreGate(3)>>
<p class="hint-line score-gate-hint">Pink uniform rule locked: Devotion +3 required. Current: <<= setup.mindsetLabel().text>>.</p>
<</if>>
/* First time this tier: she orders the pink brief (setup, not random mid-shift dump) */
<<if !$flags.workPinkBriefOrdered && setup.scoreGate(3)>>
<<set $flags.workPinkBriefOrdered = true>>
<<set $flags.workPinkBriefOn = true>>
<img class="hero-img centered delayed" @src="setup.ImagePath+'work/pink-brief.jpg'" alt="pink brief under work slacks">
<<if $flags.phoneUnlocked>>
<<actor girlfriend>>
(text) new rule for hotel shifts
wear the pink brief under your slacks.
nobody else has to see it. i just want you feeling it every time you move. 🔐
<</actor>>
<<else>>
<<actor-thought you>>
Before you left, she ordered you to wear a pink brief under your work slacks. "It might improve your attitude," she said while pulling the soft fabric over the cage.
<</actor-thought>>
<</if>>
<p class="delayed">The brief presses against the lock beneath your stiff hotel slacks. No guest can see it, but every step makes you feel the joke she chose for you.</p>
<<run setup.nudgeArousal(10)>>
<<elseif _shift eq 1>>
<<actor-thought you>>
A woman checks in without once looking at you: key card, good night, done. For the next hour you hope a guest looks up. None of them do. The relief you expected never quite arrives.
<</actor-thought>>
<p class="delayed">You keep your voice polite and finish checking her in while the pressure beneath your slacks grows.</p>
<<run setup.nudgeArousal(8)>>
<<elseif _shift eq 2>>
<<actor girlfriend>>
(text) edge later. not now.
if you leak in those pants i will know.
keep working. i have plans for that money. 🔐
<</actor>>
<p class="delayed">You nearly drop a guest's key card. The manager asks if you are tired, and you nod because the truth would be worse.</p>
<<run setup.peakArousal()>>
<<elseif _shift eq 3>>
<<actor-thought you>>
A couple quietly argues over whose card will pay. She takes his wallet, chooses one, and he laughs while you book their room.
You cannot stop watching how easily he lets her decide for him.
<</actor-thought>>
<p class="delayed">They leave together, still teasing each other. You adjust your slacks and call the next guest forward.</p>
<<run setup.nudgeArousal(10)>>
<<elseif _shift eq 4>>
<<actor-thought you>>
<<if $flags.workPinkBriefOn>>
Attitude homework, she called it. Crossing the lobby is the worst six seconds of the shift. The seam of the pink brief finds the lock every fourth step, and you smile like the route was chosen for comfort.
<<else>>
The cage finds a new angle every time you stand. You correct your posture the way you would a loosened tie and hope the smile lands first.
<</if>>
<</actor-thought>>
<p class="delayed">After six hours of careful steps and forced smiles, your legs ache. You have earned money, though she has already decided how you will spend it.</p>
<<run setup.nudgeArousal(12)>>
<<elseif _shift eq 5>>
<<actor-thought you>>
The coffee machine is the only witness to your posture corrections. <<if $flags.workPinkBriefOn>>While it grinds, you adjust the pink brief through your pocket and pretend to study the milk options.<<else>>While it grinds, you stretch against the counter and pretend the stretching is about your back.<</if>>
<</actor-thought>>
<p class="delayed">The manager joins you for coffee and talks about occupancy rates. You nod along with a straight face while her rules hum under your slacks like a second shift.</p>
<<run setup.nudgeArousal(10)>>
<<else>>
<<actor-thought you>>
Last check of the shift, in the bathroom mirror: tie straight, hair combed, and the cage exactly where she left it under the slacks.
<<if $flags.workPinkBriefOn>>The pink brief is wrinkled but still in place beneath your slacks.<</if>>
You fix your clothes, practice a harmless smile in the mirror, and return for your pay.
<</actor-thought>>
<p class="delayed">You tuck the cash envelope into your pocket and head home, where $girlfriendName still has the key.</p>
<<run setup.nudgeArousal(8)>>
<</if>>
<<elseif _tier eq 1>>
/* --- Fresh cage: chastity panic + mild femdom --- */
<<if _shift eq 1>>
<<actor-thought you>>
You rehearse the welcome smile twice before the lobby fills. The honeymoon couple is the first test, both of them holding hands, and the cage thuds at the timing.
<</actor-thought>>
<p class="delayed">You book their suite and keep smiling while they discuss the hot tub. Nobody hears the faint click when you shift your weight, but you do.</p>
<<run setup.nudgeArousal(8)>>
<<elseif _shift eq 2>>
<<actor-thought you>>
The manager's rule is simple: stand, smile, don't move. Standing still is worse. Every time you shift, the cage finds a new pressure point and you smile through it as though the smile is the job.
<</actor-thought>>
<p class="delayed">You invent some computer work so you can sit for a few minutes. The relief is temporary, but you need the paycheck enough to stay.</p>
<<run setup.nudgeArousal(6)>>
<<elseif _shift eq 3>>
<<actor-thought you>>
Phone buzzes. $girlfriendName. One preview word: <em>behave</em>.
<</actor-thought>>
<<actor girlfriend>>
(text) locked at work. good.
don't touch. just earn. 🔐
<</actor>>
<p class="delayed">You put the phone away and steady your hands before helping the next guest. Her order follows you through the rest of the shift.</p>
<<run setup.nudgeArousal(10)>>
<<elseif _shift eq 4>>
<<actor-thought you>>
The staff bathroom echoes, and one wrong turn of the lock would carry to the lobby. You pick the least private stall and keep every movement small.
<</actor-thought>>
<p class="delayed">You finish quickly, straighten your clothes, and make it back before anyone comes looking for you.</p>
<<run setup.nudgeArousal(8)>>
<<elseif _shift eq 5>>
<<actor-thought you>>
A guest asks you to carry one heavy bag to the elevator, and the walk turns into a negotiation between the suitcase handle and the cage. You keep your pace boring on purpose.
<</actor-thought>>
<p class="delayed">The guest tips you two dollars and says you have a careful way about you. You thank him, because the alternative is explaining what the care is for.</p>
<<run setup.nudgeArousal(8)>>
<<else>>
<<actor-thought you>>
A guest snaps her fingers from the far side of the lobby. <em>Yes, keyholder</em> nearly follows the thought, and you catch it behind your teeth, smile, and point her to the elevator.
<</actor-thought>>
<p class="delayed">She walks away without noticing. You remain behind the desk until it is time to collect your pay.</p>
<<run setup.nudgeArousal(6)>>
<</if>>
<<else>>
/* --- Soft desk (tier 0): mild only; light cage note if sealed but climb not there yet --- */
<<if $caged && _cap gte 1>>
<<if _shift eq 1 || _shift eq 2>>
<<actor-thought you>>
These are your first locked shifts, so you learn the walk: no sudden turns near door frames, no bending from the hips at the printer. Most of the time, you can focus on the work.
<</actor-thought>>
<p class="delayed">Nobody knows. You almost forget. Then you sit wrong and remember.</p>
<<run setup.nudgeArousal(4)>>
<<else>>
<<actor-thought you>>
By hour three the lobby is one smooth loop: a name, a room number, a key card. The cage only checks back in when a guest leans across the counter to point at something.
<</actor-thought>>
<p class="delayed">The shift passes without anyone noticing why you keep adjusting your stance.</p>
<<run setup.nudgeArousal(3)>>
<</if>>
<<elseif _shift eq 1>>
<<actor-thought you>>
You settle into the front-desk routine, checking names, assigning rooms, and smiling on cue. Today, you are only here for the money.
<</actor-thought>>
<p class="delayed">Nothing unusual happens, and the quiet shift still pays.</p>
<<elseif _shift eq 2>>
<<actor-thought you>>
A guest flirts at the counter. You keep it professional. She still talks past you to her partner like you are furniture.
<</actor-thought>>
<p class="delayed">You finish the check-in while she keeps speaking to her partner. They leave no tip, only the sting of being ignored.</p>
<<run setup.nudgeArousal(6)>>
<<elseif _shift eq 3 && $world eq "anwo">>
<<actor-thought you>>
Between check-ins, your mind drifts back to the rankings, $girlfriendName, and the project.
<</actor-thought>>
<p class="delayed">You make two small mistakes before forcing yourself to focus. The cash at the end of the shift helps.</p>
<<run setup.nudgeArousal(4)>>
<<elseif _shift eq 4>>
<<actor-thought you>>
The manager snaps for coffee. You bring it before she asks twice, then notice how fast you moved.
<</actor-thought>>
<p class="delayed">At closing, the manager hands you the usual envelope without mentioning how quickly you fetched the coffee.</p>
<<run setup.nudgeArousal(6)>>
<<else>>
<<actor-thought you>>
Even a boring shift pays for mall trips and gifts. You keep working until the lobby closes.
<</actor-thought>>
<p class="delayed">You finish the last check-in and clock out.</p>
<</if>>
<</if>>
/* v0.6.0: boss mini-arc, one beat per stage, calm and oblivious on the surface */
<<if _bossArcStage eq 1>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">Boss</span></span><span class="content">You keep fixing your stance behind my desk. Stand however you like, but do it where the guests can't watch you practice it.</span></div></div>
<<actor-thought you>>
He thinks it is a posture problem. In a way he has never been more right, and he will never know how little the correction helps.
<</actor-thought>>
<<set $flags.workBossArc = 1>>
<<elseif _bossArcStage eq 2>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">Boss</span></span><span class="content">Your shirt came untucked twice this morning. Around here we tuck them. Whatever you wear under there is your business, and it stays under there.</span></div></div>
<<actor-thought you>>
He saw the waistband. He chose the shirt as the thing to mention. The kindness of that choice depends entirely on how much he actually understood.
<</actor-thought>>
<<set $flags.workBossArc = 2>>
<<elseif _bossArcStage eq 3>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">Boss</span></span><span class="content">A guest asked this morning whether the polite one at the desk works every weekend. I said yes. Some people like being remembered. Think about what that's worth to you.</span></div></div>
<<actor-thought you>>
Being remembered is supposed to be a resume kind of good. The sentence sits in your pocket all shift, warm as an envelope you have not been offered yet.
<</actor-thought>>
<<set $flags.workBossArc = 3>>
<</if>>
<<set _result = setup.completeWorkShift({ pay: _pay, arousal: 2 })>>
<<set _pay = _result.pay>>
<<if _postKeyWork>><<set $flags.postKeyWorkCheckinDone = true>><<set $storyBeat = "post-key-work-checkin">><</if>>
<<if _result.climbed>>
<<run setup.nudgeArousal(4)>>
<</if>>
<div class="actor a-custom delayed"><img @src="setup.ImagePath+'work/hotel-chef.webp'" alt=""><div><span class="name-container"><span class="name">Boss</span></span><span class="content"><<if _result.climbed>>Here's your $<<= _pay >>. You're getting used to this place, so I'll see you next weekend.<<else>>Here's your $<<= _pay >>. I'll see you at the same time next weekend.<</if>></span></div></div>
<p class="hint-line delayed">Wallet: $<<= $money >> · weekends worked: <<= $workShiftsDone >></p>
<p class="hint-line delayed"><<= setup.workProgressBlurb()>></p>
<<if !_eventMode && !_postKeyWork>>
<span id="conv"></span>
<div id="options">
<<you-choice "Carry the last guest's bags up personally.">>
<<set $money += 5>>
<<run setup.nudgeArousal(3)>>
<p class="delayed">The suitcase is heavier than it looks and the guest lighter with gratitude. She presses a five into your hand by the elevator and says the polite ones always end up carrying things. You cannot argue with the summary.</p>
<p class="hint-line delayed">Tip: +$5 · Wallet: $<<= $money>></p>
<</you-choice>>
<<you-choice "Point at the elevator and lock the desk.">>
<p class="delayed">You give her the floor number, a professional smile, and nothing else. The desk chair is the only thing you carry all evening, and that is a choice too.</p>
<</you-choice>>
</div>
<</if>>
<<set _nightlifeWork = setup.nightlifeWorkPassage()>>
<<if _nightlifeWork neq "">>
<div class="quest-banner delayed">
<strong>Someone is still in the lobby</strong>
<p><<if _nightlifeWork eq "Nightlife Hotel Contact">>The copper-haired guest has checked in often enough to remember your name. Today she waits until your boss leaves.<<elseif _nightlifeWork eq "Nightlife Hotel Discretion">>Mara left one small privacy problem for you to solve before you clock out.<<elseif _nightlifeWork eq "Nightlife Hotel Complaint">>Mara is back with a second problem and enough trust to let you handle it alone.<<elseif _nightlifeWork eq "Nightlife Velvet Roster">>A folded note waits under the keyboard at the desk. The handwriting is Mara's, short and exact.<<else>>After weeks of small tests, Mara finally has a concrete offer.<</if>></p>
<<link "Stay a few minutes" _nightlifeWork>><</link>>
</div>
<</if>>
<div class="continue-links work-shift-links"><<if _postKeyWork>>[[Close out the week|End of content chat]]<<elseif !_eventMode>>[[Home]]<</if>></div>
</div>
<</nobr>><<nobr>>
<<if $flags.workEventPlugStance eq "kept" && !$flags.workEventPlugHomeDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'work/plug-shift.webp'" alt="The steel plug and Jenny's note">
<h2 class="scene-title">Home</h2>
<p class="scene-lead">$girlfriendName is on the couch. She does not ask how the lobby was.</p>
<<actor girlfriend>>You kept it in. I can tell by how you walk. Sit down. Think about who packed your workday.<</actor>>
<<actor-thought you>>
The walk home was careful. She already knew.
<</actor-thought>>
<div class="continue-links">[[Home][$flags.workEventPlugHomeDone = true]]</div>
</div>
<<elseif $flags.workEventPlugStance eq "removed" && !$flags.workEventPlugHomeDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'work/plug-shift.webp'" alt="The steel plug and Jenny's note">
<h2 class="scene-title">Home</h2>
<p class="scene-lead">$girlfriendName is on the couch with her phone. The lunch photo never came. She already knows.</p>
<<actor girlfriend>>We'll retry that rule until it sticks. Bedroom. Now.<</actor>>
<<actor-thought you>>
The afternoon was easier. This part is not.
<</actor-thought>>
<div class="continue-links">[[Home][$flags.workEventPlugHomeDone = true]]</div>
</div>
<<elseif $flags.workEventPhotoStance eq "sent" && !$flags.workEventPhotoHomeDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'work/pink-brief.jpg'" alt="The pink brief and cage in a bathroom mirror">
<h2 class="scene-title">Home</h2>
<p class="scene-lead">$girlfriendName has the photo open. She does not turn the screen toward you.</p>
<<actor girlfriend>>I already have it. Stand there and remember the frame. That was the whole point.<</actor>>
<<actor-thought you>>
You sent it at work. She is making you live in it at home too.
<</actor-thought>>
<div class="continue-links">[[Home][$flags.workEventPhotoHomeDone = true]]</div>
</div>
<<elseif $flags.workEventPhotoStance eq "dodged" && !$flags.workEventPhotoHomeDone>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'work/pink-brief.jpg'" alt="The pink brief and cage in a bathroom mirror">
<h2 class="scene-title">Home</h2>
<p class="scene-lead">$girlfriendName locks the apartment door behind you. She is not smiling.</p>
<<actor girlfriend>>The bathrooms were busy. Okay. Pants down. Now.<</actor>>
<<actor-thought you>>
The stall excuse did not survive the walk home.
<</actor-thought>>
<div class="continue-links">[[Home][$flags.workEventPhotoHomeDone = true]]</div>
</div>
<<else>>
<div class="scene-panel compact">
<img class="hero-img centered" @src="setup.ImagePath+'work/desk-soft.jpg'" alt="The hotel desk after a shift">
<p class="scene-lead">Nothing extra is waiting at home from this shift.</p>
<div class="continue-links">[[Home]]</div>
</div>
<</if>>
<</nobr>>